КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Передача параметров из Pascal-программы в программу на ассемблере
End. Begin Требования к программе на языке Pascal Требования к программе на языке Assembler Mov ah,0 Asm Ассемблерные вставки End. Begin Const Операторы типа inline Внешние процедуры Ассемблерные вставки Операторы типа inline Связь Assembler с языками высокого уровня End begin Cseg ends Begin endp Ret Begin proc far Data ends Stack ends Endm Mov ah, 09h Lea dx, mes Promt macro mes Пример программы, использующей макрокоманды Особенности трансляции при получении объектного модуля Если в тексте программы указать имя (макрокоманду), то будет выполнен код макроопределения с учетом фактических параметров. ENDM
1. Происходит вставка макрорасширений в то место программы, где находятся макрокоманды. 2. Формируется модуль с расширением.obj. Длина самой программы может оказаться в несколько раз больше, чем исходной, т.к. в программу вставляются макрорасширения. Где можно разместить макроопределение? 1. В тексте модуля, но до объявления сегментов. 2. В отдельном файле, который создает программист. Этот файл должен быть вставлен транслятором с помощью директивы INCLUDE <имя>. 3. Использование макробиблиотек.
int 21h stack segment para stack 'stack' dw 32 dup(?) data segment para 'data' mes1 db 'test of macro', '$' mes2 db 'assembler', '$' cseg segment para 'code' … promt mes1; вывод первого сообщения … promt mes2; вывод второго сообщения Для взаимодействия программы на языке Assembler с программой на Паскале можно использовать:
Пример: n=7; massiv: array[1..n] of integer = (1,2,3,2,17,7,2); function max(var mas, n:integer):integer; inline ($59/ $5E/ … $8B/$C3); набор машинных команд writeln('Максимум', max(massiv,N)); readln;
Пример: … int 16h end; …
Встроенный Assembler обладает ограниченными возможностями. · Написать процедуру ближнего или дальнего типа. · Объявить эту процедуру с помощью директивы public. · Произвести компиляцию для получения объектного файла: TASM/zi имя 1. Нужно объявить вызываемую процедуру как внешнюю Procedure <имя> [пар]; external; 2. Необходимо указать путь к файлу, в котором содержится модуль программы на ассемблере: {$L <путь>}. 3. Чтобы программа могла работать под отладчиком, ввести в программу директиву {$D+}
Пример: Program mxpas; {$D+} uses crt; procedure asmproc (ch:char; x, y, kol:integer); external; {$L <файл на ассемблере>} clrscr; asmproc ('a',1,2,3); При обращении к внешней процедуре на ассемблере фактические параметры записываются в стек в той последовательности, в какой они указаны в операторе. Программа на Assembler должна взять параметры, учитывая следующие соглашения: · Сохранить содержимое регистра BP в стеке. · Записать в регистр BP адрес вершины стека · Все обращения к стеку следует выполнять, используя базовый регистр BP · При возврате управления в программу на Pascal программа на Assembler должна выполнить очищение стека, а именно: восстановить содержимое регистра BP, удалить из стека переданные процедуре аргументы.
[BP+12] – чтение PAR1 Использование директивы model для организации взаимодействия программ При использовании директивы программа на Assembler может использовать имена переменных, объявленных в Pascal-программе.
Пример программы на Assembler с директивой model:
Дата добавления: 2014-01-04; Просмотров: 469; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |