Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet200/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   196   197   198   199   200   201   202   203   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Рис. 15.2. Синтаксис директивы ARG
Несколько слов об обозначениях на рисунке:
я имя — идентификатор переменной, который будет использоваться в процедуре
на ассемблере для доступа к соответствующей переменной в стеке;
* тип — тип данных аргумента (по умолчанию WORD для
и DWORD для use32);
определяет количество аргументов с данным именем. Место в стеке
для них будет определено, исходя из расчета:
 •
 •
По умолчанию
 —
определяет, сколько элементов данного типа задает данный аргу-
мент. По умолчанию его значение равно но для типа byte
= 2, так
как стековые команды не работают с отдельными байтами. Хотя, если явно за-
дать
= 1, то транслятор действительно будет считать, что в ячейку
стека помещен один байт;
я идентификатор — имя константы, значение которой присваивает транслятор.
Об идентификаторе мы подробно поговорим чуть позже.
Таким образом, директива ARG определяет аргументы, передаваемые в про-
цедуру. Ее применение позволяет обращаться к аргументам по их именам, а не по
смещениям относительно содержимого ВР. К примеру, если в начале рассматри-
ваемой нами процедуры на ассемблере asmproc задать директиву ARG в виде arg
kol:word,y:word,
то к аргументам процедуры можно будет обращаться
по их именам, без подсчета смещений. Ассемблер сам выполнит всю необходимую


352 Глава
Модульное программирование
работу. В этом можно убедиться, запустив программу в отладчике. Обратите вни-
мание: порядок следования аргументов в директиве arg является обратным поряд-
ку их следования в описании процедуры (строка procedure
external; в программе на Pascal). Процедура asmproc с директивой arg
представлена в листинге 15.14.
Листинг
Использование директивы arg
на
вызывающая процедуру на ассемблере, полностью
совпадает с листингом 15.12}
MODEL
STACK 256
main:
asmproc proc near
;обьявление аргументов:
arg
PUBLIC asmproc
push bp
указателя базы
;настройка bp на стек через sp
ptr у ; у в
mov
ptr x ; x в
mov
службы BIOS
int 10h
прерывания BIOS
mov
службы BIOS
mov
;символ - в
mov
;маска вывода символа
хог
mov
в сх
int 10h
прерывания BIOS
pop bp
ret a_size ;будет
8 и выход из процедуры
asmproc endp
процедуры
end main
программы
После того как решена проблема передачи аргументов в процедуру и выполне-
ны все необходимые действия, возникает очередной вопрос: как правильно воз-
вратить управление? При возврате управления в программу на Pascal нужно
помнить, что соглашения этого языка требуют, чтобы вызываемые процедуры са-
мостоятельно очищали за собой стек. Программа на ассемблере также должна удов-
летворять этому требованию и заботиться об очистке стека перед своим заверше-
нием. Для этого необходимо составить эпилог.
Действия, выполняемые кодом эпилога для связи
1. Записать содержимое bp в sp командой mov
Это действие восстанавлива-
ет в sp значение, которое было на момент входа в процедуру. Необходимость
в этом действии возникает в том случае, если в процедуре производилась рабо-
та со стеком. В листинге 15.13 такой работы не было, поэтому код эпилога реа-
лизует только следующие два действия.
2. Восстановить сохраненный в стеке регистр ВР.
3. Удалить из стека переданные процедуре аргументы.
Для удаления из стека аргументов можно использовать различные способы.


Связь ассемблера с языками высокого уровня 353
И Можно явно скорректировать значение SP, переместив указатель стека на необ-
ходимое количество байтов в положительную сторону. Это — не универсаль-
ный способ, к тому же он чреват ошибками, особенно при частых модификаци-
ях программы.
11 Можно использовать в директиве arg после записи последнего аргумента опе-
ранд, состоящий из символа равенства (=) и идентификатора, указанного за ним
в следующей синтаксической конструкции:
В этом случае TASM при обработке директивы arg подсчитает количество бай-
занятых всеми аргументами, и присвоит их значение идентификатору.
В нашем случае директиву arg можно определить так:
arg
TASM после обработки данной директивы присвоит имени
значение
8 (байт). Это имя впоследствии нужно будет указать в качестве операнда ко-
манды ret:
ret a_size
Есть еще одна возможность организации данных
— исполь-
зовать операнды директивы MODEL. Вы помните, что она позволяет задать модель
памяти и учесть соглашения языков высокого уровня о вызове процедур. Для свя-
зи
ее можно задавать в виде
MODEL
Задание в таком виде директивы MODEL позволяет:
описать аргументы процедуры непосредственно в директиве
asmproc proc near
автоматически сгенерировать код пролога и эпилога в процедуре на ассемблере;
для доступа к аргументам, объявленным в
использовать их имена (в этом
отношении данный вариант является аналогом предыдущего варианта с дирек-
тивой ARG).
Листинг 15.15 демонстрирует, как отражаются особенности данного варианта
на тексте процедуры ассемблера. Обратите внимание на то, что пролога уже нет,
так как он формируется транслятором автоматически; вместо эпилога обязатель-
но нужно задавать команду RET, только без операндов. Интересно изучить текст
листинга
который получается в результате трансляции листинга
В нем
видны сформированные транслятором коды пролога и эпилога. Кроме того, транс-
лятор заменил команду RET без операндов командой ret 0008, которая, в соответ-
ствии с требованиями к взаимодействию с программами на Pascal, удалит из стека
аргументы, переданные вызываемой процедуре.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   196   197   198   199   200   201   202   203   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish