Комплект лабораторных 1-6 / Лаба 6
.docМинистерство образования Российской Федерации
Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»
Кафедра МОЭВМ
Отчет по лабораторной работе №5
Модульное программирование.
Связь процедур на языке Ассемблера (ЯА)
с процедурами на языке высокого уровня (ЯВУ).
Вариант 14
Выполнили:
студенты гр. 3352
Воронин С.
Сергеев М.
Проверил:
Улитовский В.А.
Санкт-Петербург
2005 г.
Текст задания
Составить программу, вычисляющую выражение Z= a /(b - c + d). Ввод и вывод данных должны быть написаны на ЯВУ (Паскаль), а вычисление выражения на ЯА в виде отдельного модуля.
Анализ задания.
В среде Турбо-Паскаль(ТП) отсутствуют простые средства для выгрузки объектных модулей, но имеется возможность скомпоновать объектный файл ЯА с компилируемой программой на ЯВУ:
{$L <имя_файла.obj>}
Компонуемая программа в точке вызова должна быть описана как
внешняя (EXTERNAL).
В модуле на ЯА данные, переданные ЯВУ, записываются в константы из стека. А ответ возвращается в регистре AX.
Текст программы
Программа на ЯВУ
program main;
function calc(a,b,c,d:word):word;External; {описание внешней функции}
{$L proc.OBJ} {подключение объектного файла ЯА}
var a,b,c,d,result:word;
begin
writeln('a/(b-c+d)'); {ввод}
writeln('Введите a');
readln(a);
writeln('Введите b');
readln(b);
writeln('Введите c');
readln(c);
writeln('Введите d');
readln(d);
result:=calc(a,b,c,d); {вызов функции}
write('Result: ',result); {вывод}
Readln;
end.
Модуль на ЯА
a EQU word PTR[bp+10] ;чтение переданных данных в константы
b EQU word PTR[bp+8]
c EQU word PTR[bp+6]
d EQU word PTR[bp+4]
.model small
.code
public calc ; описание процедуры как публичной (доступной из вне)
calc PROC
Push bp ;сохранение в стеке регистра bp
mov bp, sp
mov ax,b
sub ax,c ; b-c
add ax,d ; (b-c)+d
mov bx,ax
mov ax,a
div bx ; a / (b-c+d)
pop bp ; восстановление из стека регистра bp
ret 8 ; выход из процедуры и очистка стека от переданных данных
calc ENDP
end
Результат тестирования программы
Программа корректно работает при всех возможных вариантах исходных данных.
Выводы
В данной лабораторной работе мы изучили связь процедур на языке Ассемблера
с процедурами на языке высокого уровня. Метод программирования, при котором сама программа пишется на ЯВУ, а вычисляющий алгоритм на ЯА, совмещает в себе лучшие качества обоих языков. Программу удобно и быстро писать, как на ЯВУ, но при этом она работает также быстро, как написанная на ЯА.