Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Міністерство Освіти і Науки України
Національний Технічний Університет
Лабораторна робота № 1
по курсу “Системне програмування”
на тему:
“Вивчення роботи компіляторів мов Pascal, C та Assembler”
Виконав:
студент групи КІТ-11А
Ткаченко С. М.
Мета роботи:
Ознайомлення з компіляторами. Вивчення особливостей компіляції. Аналіз коду, отриманого в результаті компіляції.
Індивідуальне завдання:
Маємо масив 10 байтів. Знайти кількість чисел, більших 128 та менших 144.
1.Вивчення компілятора мови Pascal.
1.1.Текст програми мовою Pascal:
uses crt;
const
N = 10;
var
mas : array [1..N] of byte;
i, c, flag : integer;
begin
clrscr;
c := 0;
for i := 0 to N do
begin
mas[i] := 120 + random(30);
write( mas[i] : 4 );
end;
flag := $7777;
for i := 0 to N do
if (mas[i] > 128) and (mas[i] < 144) then
c := c + 1;
flag := $7777;
write( c : 10 );
end.
1.2.Лістінг фрагменту програми:
1CE5:006A C70660007777 MOV WORD PTR [0060],7777
1CE5:0070 31C0 XOR AX,AX ;(AX) = 0
1CE5:0072 A35C00 MOV [005C],AX ;(DS):[005C] = i = 0
1CE5:0075 EB04 JMP 007B ;(IP) = 007B
1CE5:0077 FF065C00 INC WORD PTR [005C] ; i++
1CE5:007B 8B3E5C00 MOV DI,[005C] ; (DI) = 0000:[005C] = i
1CE5:007F 80BD510080 CMP BYTE PTR [DI+0051],80 ;(DS):[0051] – початок масиву
1CE5:0084 7612 JBE 0098 ; mas[i]<=80h => (IP) = 0098
1CE5:0086 8B3E5C00 MOV DI,[005C] ; (DI) = i
1CE5:008A 80BD510090 CMP BYTE PTR [DI+0051],90
1CE5:008F 7307 JNB 0098 ; mas[i]>=90h => (IP) = 0098
1CE5:0091 A15E00 MOV AX,[005E] ;(AX) = (DS):[005E] = c
1CE5:0094 40 INC AX ;(AX)++
1CE5:0095 A35E00 MOV [005E],AX ; c = (AX)
1CE5:0098 833E5C000A CMP WORD PTR [005C],+0A ; перевірка лічильника
1CE5:009D 75D8 JNZ 0077 ; наступна ітерація циклу
1CE5:009F C70660007777 MOV WORD PTR [0060],7777
2.Вивчення компілятора мови С:
2.1.Текст програми мовою C:
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#define N 10
void main()
{ clrscr();
unsigned char mas[N];
int label, n = 0;
srand(time(NULL));
for ( int i = 0; i < N ; i++ )
{ mas[i] = 120 + rand()%30;
cout << (int)mas[i] << " ";
}
label = 0xAAAA;
for ( i = 0; i < N; i++ )
if ( (mas[i] > 128) && (mas[i] < 144 ) )
n++;
label = 0xAAAA;
cout << endl << n << endl;
}
2.2.Лістінг фрагменту програми:
1CE5:449E C746F4AAAA MOV WORD PTR [BP-0C],AAAA
1CE5:44A3 33F6 XOR SI,SI ; (SI) = i = 0
1CE5:44A5 EB0E JMP 44B5 ; (IP) = 44B5
1CE5:44A7 807AF680 CMP BYTE PTR [BP+SI-0A],80
1CE5:44AB 7607 JBE 44B4 ; mas[i]<=80h => (IP) = 44B4
1CE5:44AD 807AF690 CMP BYTE PTR [BP+SI-0A],90
1CE5:44B1 7301 JNB 44B4 ; mas[i]>=90h => (IP) = 44B4
1CE5:44B3 47 INC DI ; (DI)++
1CE5:44B4 46 INC SI ; (SI)++
1CE5:44B5 83FE0A CMP SI,+0A ; перевірка лічильника
1CE5:44B8 7CED JL 44A7 ; наступна ітерація циклу
1CE5:44BA C746F4AAAA MOV WORD PTR [BP-0C],AAAA
3.Вивчення компілятора мови Assembler:
3.1.Текст програми мовою Assembler:
sts segment stack 'stack'
db 64 dup(?)
sts ends
data segment
mas db 120, 70, 129, 145, 110, 134, 140, 181, 200, 140, 99
number dw 10
c db 0
flag dw ?
data ends
code segment
assume cs:code, ds:data, ss:sts
begin:
mov ax, data
mov ds, ax
xor si, si
mov flag, 0AAAAh
mov cx, number
cycl: cmp mas[si], 128
jle m1
cmp mas[si], 144
jge m1
inc c
m1: inc si
loop cycl
mov flag, 0AAAAh
mov ah, 4Ch
int 21h
code ends
end begin
3.2.Лістінг фрагменту програми:
1CEA:0007 C7060E00AAAA MOV WORD PTR [000E],AAAA
1CEA:000D 8B0E0B00 MOV CX,[000B] ; (CX) = 0000:[000B] = number
1CEA:0011 80BC000080 CMP BYTE PTR [SI+0000],80
1CEA:0016 7E0B JLE 0023 ; mas[i]<=80h => (IP) = 0023
1CEA:0018 80BC000090 CMP BYTE PTR [SI+0000],90
1CEA:001D 7D04 JGE 0023 ; mas[i]>=90h => (IP) = 0023
1CEA:001F FE060D00 INC BYTE PTR [000D] ; c++
1CEA:0023 46 INC SI ; (SI)++
1CEA:0024 E2EB LOOP 0011 ; наступна ітерація циклу
1CEA:0026 C7060E00AAAA MOV WORD PTR [000E],AAAA
Висновки:
Ознайомившись з компіляторами мов Pascal, C та Assembler, я дійшов висновку, що найбільш ефективним є компілятор Асемблеру, бо він не вносить у код жодної зайвої інформації. Компілятор С створює найбільш важкий для зрозуміння код з причини нестандартного зберігання даних. Код, створений компілятором мови Pascal, більш зрозумілий, але він містить деякі зайві інструкції.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.