Вивчення роботи компіляторів мов Pascal, C і Assembler

Страницы работы

Содержание работы

Міністерство освіти і науки України

Національний технічний університет

“Харківський політехнічний інститут”

Кафедра обчислювальної техніки та програмування

Лабораторна робота №3

“Вивчення роботи компіляторів мов Pascal, C і Assembler”

                                                                                Виконав:

                                                                                студент групи АП-30б

                                                                                Шпіка П. М.

                                                                                Перевірив:

                                                                                Межерицький С. Г.

Харків 2002

1.  Тема роботи: Вивчення роботи компіляторів мов Pascal, C і Assembler.

2.  Мета роботи: Ознайомлення з компіляторами. Вивчення особливостей компіляції. Аналіз коду, отриманого в результаті компіляції.

3.  Постановка задачі: Відповідно до індивідуального завдання написати три програми:

1)  - мовою Pascal        (файл lrsp1pas.pas)

2)  - мовою C               (файл lrsp1c.c)

3)  - мовою Assembler (файл lrsp1asm.asm)

Провести компіляцію кожного файлу й одержати файли, що завантажуються,  lrsp1pas.exe, lrsp1c.exe, lrsp1asm.exe. Використовуючи відладчик debug.exe, одержати лістинги машинних кодів програм і провести аналіз цих кодів.

4.  Текст завдання (варіант 19): Задан масив А з N=30 елементів (констант типу WORD). Визначити кількість елементів масиву А, для яких біти 3 і 11 співпадають.

5.  Тексти програм:

1)  lrsp1asm.asm

stek segment stack

       db 128 dup (?)

stek ends

data segment

a      dw 1,2,3,4,5,6,7,8,2048,2056

i       dw ?

a1    dw ?

a2    dw ?

c      dw 0

m1   db "Total found $"

m2   db " numbers",10,13,'$'

data ends

code segment

assume cs:code,ds:data,ss:stek

main:

  mov ax,data

  mov ds,ax

  mov ax,stek

  mov ss,ax

  mov cx,10

  mov si,offset a

repeat:

  push cx

  mov ax,a[si]

  mov a1,ax

  mov a2,ax

  mov cl,3

  shr a1,cl

  mov cl,11

  shr a2,cl

  mov bx,a1

  mov dx,a2

  xor bx,dx

  and bx,1

  cmp bx,1

  je next

  inc c

next:

  add si,2

  pop cx

  loop repeat

  mov ah,9h

  mov dx,offset m1

  int 21h

  mov ah,2h

  mov dx,c

  add dx,30h

  int 21h

  mov ah,9h

  mov dx,offset m2

  int 21h

  mov ah,4ch

  int 21h

code ends

end main

2)  lrsp1c.c

#include<stdio.h>

int main()

{

 int s=0x5555,

     a[10]={1,2,3,4,5,6,7,8,2048,2056},

     i,a1,a2,c=0;

 s=0x5555;

 s=0x5555;

 for(i=0;i<10;i++)

 {

  s=0x5555;

  a1=a[i];

  s=0x5555;

  a2=a[i];

  s=0x5555;

  a1=a1>>3;

  s=0x5555;

  a2=a2>>11;

  s=0x5555;

  if( !((a1^a2)&0x1) )

    c++;

 }

 s=0x5555;

 printf("Total found %d numbers\n",c);

 s=0x5555;

 s=0x5555;

 return 0;

}

3)  lrsp1pas.pas

uses crt;

var  a:array[0..9] of integer;

     i,a1,a2,c,s:integer;

begin

  s:=$5555;

  s:=$5555;

  c:=0;

  a[0]:=1;

  a[1]:=2;

  a[2]:=3;

  a[3]:=4;

  a[4]:=5;

  a[5]:=6;

  a[6]:=7;

  a[7]:=8;

  a[8]:=2048;

  a[9]:=2056;

  s:=$5555;

  for i:=0 to 9 do

  begin

    s:=$5555;

    a1:=a[i];

    a2:=a[i];

    a1:=a1 div 8;

    a1:=a1*32768;

    a2:=a2 div 2048;

    a2:=a2*32768;

    s:=$5555;

    if a1=a2

      then c:=c+1;

  end;

  s:=$5555;

  writeln('Total found ',c,' numbers');

  s:=$5555;

  s:=$5555;

end.

6.  Лістинги машинних кодів з докладними коментарями.

1)  lrsp1asm.lst

22E8:0000 B8E422        MOV AX,22E4

22E8:0003 8ED8            MOV DS,AX

22E8:0005 B8DC22       MOV AX,22DC

22E8:0008 8ED0            MOV SS,AX

22E8:000A B90A00       MOV CX,000A

22E8:000D BE0000       MOV SI,0000

22E8:0010 51                  PUSH CX

22E8:0011 8B840000     MOV AX,[SI+0000]

22E8:0015 A31600         MOV [0016],AX

22E8:0018 A31800         MOV [0018],AX

22E8:001B B103            MOV CL,03

22E8:001D D32E1600   SHR WORD PTR [0016],CL

22E8:0021 B10B            MOV CL,0B

22E8:0023 D32E1800    SHR WORD PTR [0018],CL

22E8:0027 8B1E1600     MOV BX,[0016]

22E8:002B 8B161800     MOV DX,[0018]

22E8:002F 33DA             XOR BX,DX

22E8:0031 83E301          AND BX,+01

22E8:0034 83FB01         CMP BX,+01

22E8:0037 7404              JZ  003D

22E8:0039 FF061A00     INC WORD PTR [001A]

22E8:003D 83C602        ADD SI,+02

22E8:0040 59                  POP CX

22E8:0041 E2CD            LOOP 0010

22E8:0043 B409             MOV AH,09

22E8:0045 BA1C00        MOV DX,001C

22E8:0048 CD21             INT 21

22E8:004A B402            MOV AH,02

22E8:004C 8B161A00   MOV DX,[001A]

22E8:0050 83C230         ADD DX,+30

22E8:0053 CD21            INT 21

22E8:0055 B409            MOV AH,09

22E8:0057 BA2900       MOV DX,0029

22E8:005A CD21           INT 21

Похожие материалы

Информация о работе