Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
38.4 Кб
Скачать

Министерство образования Российской Федерации

Санкт-Петербургский Государственный Электротехнический Университет «ЛЭТИ»

Кафедра МОЭВМ

Отчет по лабораторной работе №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

Результат тестирования программы

Программа корректно работает при всех возможных вариантах исходных данных.

Выводы

В данной лабораторной работе мы изучили связь процедур на языке Ассемблера

с процедурами на языке высокого уровня. Метод программирования, при котором сама программа пишется на ЯВУ, а вычисляющий алгоритм на ЯА, совмещает в себе лучшие качества обоих языков. Программу удобно и быстро писать, как на ЯВУ, но при этом она работает также быстро, как написанная на ЯА.

Соседние файлы в папке Комплект лабораторных 1-6