Вивчення компіляторів мови Паскаль та асемблер (Звіт з лабораторної роботи № 1)

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

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

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

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

«Харківський Політехнічний Інститут»

Звіт

з лабораторної роботи № 1

з дисципліни «системного програмування»

Виконав:  студент

групи КІТ-14в     

Богачов О. С.      

Викладачі:           

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

Харків-2006 р.

Тема: Вивчення компіляторів мови Паскаль та асемблер.

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

Хід виконання роботи:

Індивідуальне завдання:

Задано масиви А и В по N = 25 елементів (констант типу WORD). Визначити суму й кількість елементів Ai, що задовольняють умові Ai > Bi. Використовуючи відладник debug.exe, отримати лістінг машиних кодів програм та провести аналіз цих кодів.


Текст програми на асемблері:

data segment

  n    dw 25; kol-vo elementov

  a    dw 5 dup (10,4,4,0,1)

  b    dw 5 dup (9,10,2,1,3)

  s    dw 8738

  k    dw 4369

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

          mov ds,ax

          lea si,a

          lea di,b

          mov cx,n

          xor ax,ax

                   pop bp

                   xor bp,bp

   m2:mov bx,[si]

          mov dx,[di]

          cmp bx,dx

          jle m1

          add ax,bx

                   inc bp              

    m1:add si,2

           add di,2

           loop m2

           mov s,ax

               mov k,bp

                    push bp

           mov ah,4ch

           int 21h

      code ends

              end start


Текст програми на мові Паскаль:

program l4;

var

               q,i:integer;

               a:array[1..25] of integer;

  b:array[1..25] of integer;

  s:integer;

  k:integer;

begin

               randomize;

  q:=$5555;

               for i:=1 to 25 do

  begin

    a[i]:=random(10);

    write(a[i],' ');

  end;

  writeln;

  q:=$5555;

               for i:=1 to 25 do

  begin

    b[i]:=random(10);

    write(b[i],' ');

  end;

  writeln;

  q:=$5555;

  k:=0;

  s:=0;

  for i:=1 to 25 do

  if (a[i]>b[i]) then

  begin

               inc(k);

    s:=s+a[i];

  end;

  write(s,' ',k);

  q:=$5555;

  end.


Текст програми на мові С:

void main(void)

{

 int i,k=0,a[25],b25,s=0;

  i=0x5555;

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

  a[i]=random(10);

  i=0x5555;

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

  b[i]=random(10);

  i=0x5555;

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

  if(a[i]>b[i])

 {

k++;

s=s+[i];

 }

  i=0x5555;

  cout<<s<<” ”<<k;

  i=0x5555;

}

Лістінг машиних кодів:

Pascal


0D01:0014 C70652005555  MOV   WORD PTR [0052],5555      i:=$5555        

0D01:001A C70654000100  MOV   WORD PTR [0054],0001      for i:=1         

0D01:0020 EB04          JMP   0026                              

0D01:0022 FF065400      INC   WORD PTR [0054]                   

0D01:0026 B80A00        MOV   AX,000A                           

0D01:0029 50            PUSH  AX                                

0D01:002A 9A3D08190D    CALL  0D19:083D                 random(10)        

0D01:002F 8B3E5400      MOV   DI,[0054]                         

0D01:0033 D1E7          SHL   DI,1                              

0D01:0035 89855400      MOV   [DI+0054],AX              a[i]        

0D01:0039 BFBE01        MOV   DI,01BE                            

0D01:003C 1E            PUSH  DS                                

0D01:003D 57            PUSH  DI                                

0D01:003E 8B3E5400      MOV   DI,[0054]                          

0D01:0042 D1E7          SHL   DI,1                              

0D01:0044 8B855400      MOV   AX,[DI+0054]                      

0D01:0048 99            CWD                                     

0D01:0049 52            PUSH  DX                                 

0D01:004A 50            PUSH  AX                                

0D01:004B 31C0          XOR   AX,AX                             

0D01:004D 50            PUSH  AX                                

0D01:004E 9A2207190D    CALL  0D19:0722                 write(a[i],' ');        

0D01:0053 B020          MOV   AL,20                             

0D01:0055 50            PUSH  AX                                

0D01:0056 31C0          XOR   AX,AX                             

0D01:0058 50            PUSH  AX                                 

0D01:0059 9A7B06190D    CALL  0D19:067B                         

0D01:005E 9AFE05190D    CALL  0D19:05FE                         

0D01:0063 9A9102190D    CALL  0D19:0291                         

0D01:0068 833E540019    CMP   WORD PTR [0054],+19       to 25        

0D01:006D 75B3          JNZ   0022                      do        

0D01:006F BFBE01        MOV   DI,01BE                           

0D01:0072 1E            PUSH  DS                                

0D01:0073 57            PUSH  DI                                

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

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