Міністерство освіти та науки України
Національний Технічний Університет
«Харківський Політехнічний Інститут»
Звіт
з лабораторної роботи № 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.