русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование операндов директивы model


Дата добавления: 2014-11-27; просмотров: 579; Нарушение авторских прав


Есть еще одна возможность организации данных Pascal - ассемблер - использование операндов директивы model. Вы помните, что она позволяет задать модель памяти и учесть соглашения языков высокого уровня о вызове процедур. Для связи Pascal - ассемблер ее можно задавать в виде:

MODEL large, pascal

Задание в таком виде директивы model позволяет

hописать аргументы процедуры непосредственно в директиве ргос:

asmproc ргос near ch:byte,x:word,y:word,kol:word

hавтоматически сгенерировать код пролога и эпилога в процедуре на ассемблере;

hдля доступа к аргументам, объявленным в ргос, использовать их имена. В этом отношении данный вариант является аналогом предыдущего варианта с дирек­тивой arg.

Листинг 4 демонстрирует, как отразились особенности данного варианта на тексте процедуры ассемблера. Обратите внимание, что пролога уже нет, так как он формируется транслятором автоматически; вместо эпилога обязательно нуж­но задавать только ret без операндов. Интересно изучить текст листинга 5, который получится в результате трансляции листинга 6. В нем видны сфор­мированные транслятором коды пролога и эпилога. Кроме того, транслятор за­местил команду ret без операндов командой ret 0008, которая, в соответствии с требованиями к взаимодействию с программами на Pascal, удалит из стека аргу­менты, переданные вызываемой процедуре.

Использование директивы MODEL (листинг 4).

prg4.pas

{Программа на Pascal, вызывающая процедуру на ассемблере, полностью совпадает с листингом 1}

;prg4.asm

MASM

MODEL large, pascal

STACK 256

.code

main:

asmproc proc near chr:BYTE,x:WORD,y:WORD,kol:WORD

PUBLIC asmproc

mov dh, byte ptr y ; y в dh

mov dl, byte ptr x ; x в dl

mov ah, 02h ; номер службы BIOS

int 10h ; вызов прерывания BIOS

mov ah, 09h ; номер службы BIOS

mov al, chr ; символ - в al



mov bl, 07h ; маска вывода символа

xor bh, bh

mov cx, kol ; kol в cx

int 10h ; вызов прерывания BIOS

ret

asmproc end ; конец процедуры

end main ; конец программы

 

Результат трансляции листинга 4 (листинг 5).

 

1 prg5.asm

2 MASM

3 0000 MODEL large,pascal

4 0000 STACK 256

5 0000 .code

6 0000 main:

7 0000 asmproc proc near chr:BYTE,x:WORD,y:WORD,kol:WORD

8 PUBLIC asmproc

1 9 0000 55 PUSH BP

1 10 0001 8В EC MOV BP, SP

1 11 0003 8А 76 06 mov dh, byte ptr у ;y в dh

12 0006 8А 56 08 mov dl, byte ptr x ;х в d1

13 0009 В4 02 mov ah, 02h ; номер службы BIOS

14 OOOB CD 10 int lOh ;вызов прерывания BIOS

15 OOOD B4 09 mov ah,09h ;номер службы BIOS

16 OOOF 8A 46 OA mov a1chr ;символ - в а1

17 0012 ВЗ 07 mov bl, 07h ;маска вывода символа

18 0014 32 FF xor bh, bh

19 0016 8В 4Е 04 mov cx.kol ;ko1 в сх

20 0019 CD 10 int lOh ;вызов прерывания BIOS.

1 21 001В 5D POP BP

1 22 001С С2 0008 RET 00008h

23 001F asmproc endp ;конец.процедуры

24 end main ;конец программы

Таким образом, можно считать, что мы разобрались со стандартными способами вызова ассемблерных процедур из программ на Pascal и передачи им аргументов. Эти способы будут работать всегда, но компилятор может предоставлять и более удобные средства. Их мы рассматривать не будем, так как читатель, наверное, уже понимает, что они будут сводиться, в конечном счете, к разобранной нами про­цедуре. Остались открытыми два вопроса:

1. Как быть с передачей данных остальных типов Pascal - ведь мы рассмотрели только данные размером в байт и слово?

2. Как возвратить значение в программу на Pascal?



<== предыдущая лекция | следующая лекция ==>
Директива ARG | Передача данных остальных типов Pascal


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.143 сек.