Мета роботи: Розробити три однакові програми на мовах С, Pascal та Assembler. Отримати за допомогою програми DEBUG з ЕХЕ - файлів лістинги програм та проаналізувати їх з вихідними файлами.
Індивідуальне завдання: В масиві типу word знайти суму негативних елементів.
Програма на мові Pascal:
var
mas:array[1..15] of integer;
i,s:integer;
begin
i:=$5555;
randomize;
for i:=1 to 15 do
begin
mas[i]:= 40 - random(50);
end;
s:=0;
for i:=1 to 15 do
begin
if mas[i]<0 then
s:=s+mas[i];
writeln(mas[i]);
end;
writeln('summa=',s);
i:=$5555;
end.
Лістинг програми:
1E46:000F C70670005555 MOV WORD PTR [0070],5555 - і = $5555
1E46:0015 9A4D08531E CALL 1E53:084D - вызов Randomize
1E46:001A C70670000100 MOV WORD PTR [0070],0001 - і = $5555
1E46:0020 EB04 JMP 0026 - обход инкремента индекса
1E46:0022 FF067000 INC WORD PTR [0070] - переходим на следующий элемент
1E46:0026 B83200 MOV AX,0032 - в АХ заносим 50 и
1E46:0029 50 PUSH AX - АХ в стек
1E46:002A 9AB807531E CALL 1E53:07B8 - вызов Random(50)
1E46:002F 8BD0 MOV DX,AX - в DX значение от Random(50)
1E46:0031 B82800 MOV AX,0028 - в АХ заносим 40
1E46:0034 2BC2 SUB AX,DX - 40-Random(50)
1E46:0036 8B3E7000 MOV DI,[0070] - в di заносим индекс і
1E46:003A D1E7 SHL DI,1 - сдвигаем значение di
1E46:003C 89855000 MOV [DI+0050],AX - заносим mas[i] = 40-Random(50)
1E46:0040 833E70000F CMP WORD PTR [0070],+0F - сравниваем индекс с 15
1E46:0045 75DB JNZ 0022 - повторяем цикл
1E46:0047 31C0 XOR AX,AX - АХ в ноль
1E46:0049 A37200 MOV [0072],AX - i=ax
1E46:004C C70670000100 MOV WORD PTR [0070],0001 - i=1
1E46:0052 EB04 JMP 0058 - обход инкремента индекса
1E46:0054 FF067000 INC WORD PTR [0070] - переходим на следующий элемент
1E46:0058 8B3E7000 MOV DI,[0070] - в di заносим индекс і
1E46:005C D1E7 SHL DI,1 - сдвигаем значение di
1E46:005E 83BD500000 CMP WORD PTR [DI+0050],+00 - сравниваем индекс с 0
1E46:0063 7D10 JGE 0075 - переходим на cs:0075 если …
1E46:0065 A17200 MOV AX,[0072] - хранение суммы
1E46:0068 8B3E7000 MOV DI,[0070] - в di заносим индекс і
1E46:006C D1E7 SHL DI,1 - сдвигаем значение di
1E46:006E 03855000 ADD AX,[DI+0050] - вычисление суммы
1E46:0072 A37200 MOV [0072],AX - сохранение суммы
1E46:0075 BF7401 MOV DI,0174 - в di 372
1E46:0078 1E PUSH DS - DS в стек
1E46:0079 57 PUSH DI - DI в стек
1E46:007A 8B3E7000 MOV DI,[0070] - в di заносим индекс і
1E46:007E D1E7 SHL DI,1 - сдвигаем значение di
1E46:0080 8B855000 MOV AX,[DI+0050] - заносим mas[i] в AX
1E46:0084 99 CWD -
1E46:0085 52 PUSH DX - DX в стек
1E46:0086 50 PUSH AX - AX в стек
1E46:0087 31C0 XOR AX,AX - АХ в ноль
1E46:0089 50 PUSH AX - AX в стек
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.