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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

Національний технічний університет “ХПІ”

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

Дисципліна

“Системне програмування”

Лабораторні робота №5

“Вивчення роботи компіляторів мов Паскаль, Сі та асемблера”

Виконала:

студентка групи КІТ-21Б

Сiпатова О.О.

Перевірив:

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

            М. Харків, 2003 рік

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

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

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

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

Заданi масиви А i В по N=25 елементiв (констант типу WORD).

Визначити суму i кiлькiсть елементiв Ai, що задовольнять умовi Ai > Bi.

Завдання вирішити на всіх трьох мовах програмування, а потім за допомогою системного відладчика порівняти ефективність кодів.

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

1)  Асемблер

data segment

 A dw 0,16,17,26,35,13,5,28,8,34,41,10,47,46,22,33,27,5,

      6,23,28,43,8,34,46

 B dw 0,1,10,9,47,22,34,2,40,38,47,21,41,40,30,29,36,20,

      33,24,17,13,21,8,32

 S dw 0

 K dw 0

data ends

code segment

assume ds:data,cs:code

m: mov ax,data

mov ds,ax

xor ax,ax

mov bx,ax

mov cx,25

mov si,ax

mov di,ax

m0:mov ax,A[si]

   mov bx,B[di]

   mov dx,ax

   cmp ax,bx

   jb m1

   add S,dx

   add K,1

m1:add si,2

   add di,2

   loop m0

   mov ah,4ch

   int 21h

code ends

end m

2)  Паскаль

uses crt;

const a:array[1..25] of integer =(0,16,17,26,35,13,5,28,8,34,41,10,

17,46,22,33,27,5,6,23,28,43,8,34,46);

const b:array[1..25] of integer =(0,1,10,9,47,22,34,2,40,38,47,21,

41,40,30,29,36,20,33,24,17,13,21,8,32);

var i,j:integer;

    k,s:integer;

begin

  clrscr;

  k:=0;s:=0;

  for i:=1 to 25 do

    write(a[i]:3);

  writeln;writeln;

  for i:=1 to 25 do

    write(b[i]:3);

  writeln;

  j:=$5555;

  for i:=1 to 25 do

     if a[i]>b[i] then

       begin

         inc(k);

         s:=s+a[i];

       end;

  j:=$5555;

  writeln('Количество : ',k);

  writeln('Сумма : ',s)

end.

3)  Сі

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

main()

{

 int a[25]={0,16,17,26,35,13,5,28,8,34,11,10,17,46,22,33,27,5,6,23,28,43,8,34,46};

 int b[25]={0,1,10,9,47,22,34,2,40,38,47,21,41,40,30,29,36,20,33,24,17,13,21,8,32};

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

  {

   cout<<a[i]<<"   ";

  }

  cout<<endl<<endl;

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

  {

   cout<<b[i]<<"   ";

  }

  int k=0;

  int s=0;

  cout<<endl;

  int j=0x5555;

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

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

     {k++;s+=a[i];}

  j=0x5555;

  cout<<"Количество : "<<k<<endl<<"Сумма : "<<s;

  return 0;

}

2.  Лістинги програм

1)  Асемблер

16A3:0010 8B840200      MOV AX,[SI+0002]       в АХ элемент массива А                   

16A3:0014 8B9D3400      MOV BX,[DI+0034]       в ВХ элемент массива В                    

16A3:0018 8BD0          MOV DX,AX              сохранение элемента массива А                   

16A3:001A 3BC3          CMP AX,BX              сравнение элементов массивов                   

16A3:001C 7209          JB  0027               переход если АХ<ВХ          

16A3:001E 01066600      ADD [0066],DX          если больше то суммируем          

16A3:0022 8306680001    ADD WORD PTR [0068],+01     и считаем количество          

16A3:0027 83C602        ADD SI,+02           переход на следующий элемент  А           

16A3:002A 83C702        ADD DI,+02           переход на следующий элемент  В          

16A3:002D E2E1          LOOP      0010       пока СХ неравен 0          

2)  Паскаль

169E:00DB 55            PUSH BP                                 

169E:00DC 55            PUSH BP                                

169E:00DD C706B6000100  MOV  WORD PTR [00B6],0001  i:=1            

169E:00E3 EB04          JMP  00E9                              

169E:00E5 FF06B600      INC  WORD PTR [00B6]       i:=i+1            

169E:00E9 8B3EB600      MOV  DI,[00B6]                         

169E:00ED D1E7          SHL  DI,1                              

169E:00EF 8B850000      MOV  AX,[DI+0000]                      

169E:00F3 8B3EB600      MOV  DI,[00B6]                         

169E:00F7 D1E7          SHL  DI,1                              

169E:00F9 3B853200      CMP  AX,[DI+0032]           a[i]>b[i]           

169E:00FD 7E14          JLE  0113                               

169E:00FF FF06BA00      INC  WORD PTR [00BA]        inc(k)           

169E:0103 A1BC00        MOV  AX,[00BC]                         

169E:0106 8B3EB600      MOV  DI,[00B6]                         

169E:010A D1E7          SHL  DI,1                               

169E:010C 03850000      ADD  AX,[DI+0000]          } s:=s+a[i]           

169E:0110 A3BC00        MOV  [00BC],AX             }            

169E:0113 833EB60019    CMP  WORD PTR [00B6],+19   i=25            

169E:0118 75CB          JNZ  00E5                  если i неравно 25 по продолжение цикла               

169E:011A C706B8005555  MOV  WORD PTR [00B8],5555              

3)  Сі

169E:036B 55            PUSH  BP                                

169E:036C 55            PUSH  BP                                 

169E:036D 33F6          XOR   SI,SI                 i=0             

169E:036F EB28          JMP   0399                              

169E:0371 8BDE          MOV   BX,SI                             

169E:0373 D1E3          SHL   BX,1                               

169E:0375 8D46CA        LEA   AX,[BP-36]                        

169E:0378 03D8          ADD   BX,AX                             

169E:037A 8B07          MOV   AX,[BX]                           

169E:037C 8BDE          MOV   BX,SI                              

169E:037E D1E3          SHL   BX,1                              

169E:0380 8D5698        LEA   DX,[BP-68]                        

169E:0383 03DA          ADD   BX,DX                             

169E:0385 3B07          CMP   AX,[BX]                         }if (a[i]>b[i])

169E:0387 7E0F          JLE   0398            } если АХ<ВХ то переход }           

169E:0389 47            INC   DI                   подсчитывается количество К++            

169E:038A 8BDE          MOV   BX,SI                              

169E:038C D1E3          SHL   BX,1                              

169E:038E 8D46CA        LEA   AX,[BP-36]           }             

169E:0391 03D8          ADD   BX,AX                }  s+=a[i]           

169E:0393 8B07          MOV   AX,[BX]              }             

169E:0395 0146FE        ADD   [BP-02],AX           }             

169E:0398 46            INC   SI                    i++   } for (i=0;i<25;i++)        

169E:0399 83FE19        CMP   SI,+19                i<25  }                  

169E:039C 7CD3          JL    0371              если i<25 по продолжение цикла            

169E:039E C746FC5555    MOV   WORD PTR [BP-04],5555             

3.  Висновки

При порівнянні кодів усіх трьох програм, я ще раз переконався в тому, що найефективніший код будується компілятором асемблера. Далі йде код, написаний мовою Сі, і лише потім – код програми, написаної на мові Паскаль.

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.