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



Download 12,06 Mb.
Pdf ko'rish
bet128/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   124   125   126   127   128   129   130   131   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

 механизму вызова процедур.
Суть состоит в возможности сохранения информации о контексте программы
в точке вызова процедуры. Под контекстом понимается информация о состоянии
программы в точке вызова процедуры. В системе команд процессора есть две ко-
манды для работы с контекстом — CALL и RET.
Команда CALL осуществляет вызов процедуры (подпрограммы). Синтаксис ко-
манды:
call [модификатор]
Подобно команде JMP команда CALL передает управление по адресу с символи-
ческим именем
но при этом в стеке сохраняется адрес возврата
(то есть адрес команды, следующей после команды CALL).
Команда RET считывает адрес возврата из стека и загружает его в регистры CS
и EIP/IP, тем самым возвращая управление на команду, следующую в програм-
ме за командой CALL Синтаксис команды:
ret [число]
Необязательный параметр [число] обозначает количество элементов, удаляе-
мых из стека при возврате из процедуры. Размер элемента определяется хоро-
шо знакомыми нам параметрами директивы SEGMENT —
и
(или соот-
ветствующим параметром упрощенных директив сегментации). Если указан
параметр usel6, то [число] — это значение в байтах; если use32 — в словах.
Для команды CALL, как и для JMP, актуальна проблема организации ближних
и дальних переходов. Это видно из формата команды, где присутствует параметр
[модификатор]. Как и в случае команды
вызов процедуры командой CALL мо-
жет быть внутрисегментным и межсегментным.
При
вызове процедура находится в текущем сегменте кода
(имеет тип near), и в качестве адреса возврата команда CALL сохраняет только
содержимое регистра IP/EIP, что вполне достаточно (рис. 10.4).
 При межсегментном вызове процедура находится в другом сегменте кода
тип far), и для осуществления возврата команда CALL должна запомнить содер-
жимое обоих регистров (CS и IP/EIP), при этом в стеке сначала запоминается
содержимое регистра
затем — регистра IP/EIP (рис. 10.5).
Важно отметить, что одна и та же процедура не может быть одновременно про-
цедурой ближнего и дальнего типов. Таким образом, если процедура используется
в текущем сегменте кода, но может вызываться и из другого сегмента программы,
то она должна быть объявлена процедурой типа far. Подобно команде
суще-
ствуют четыре разновидности команды CALL. Какая именно команда будет сфор-
мирована, зависит от значения модификатора в команде вызова процедуры CALL
и атрибута дальности в описании процедуры. Если процедура описана в начале
сегмента данных с указанием дальности в ее заголовке, то при ее вызове параметр


Безусловные переходы 223
Процедура ближнего типа my_proc:
Оперативная память Оперативная память
Дно стека
A
'P
.
Дно стека
|
A
I
Старшие адреса
Стек до команды
call
Старшие адреса ОП
Стек после команды
call my_proc
Рис.
Содержимое стека до и после выполнения команды вызова процедуры
ближнего типа
Процедура дальнего типа
Оперативная память Оперативная память
Дно стека
0000:0000 J
Старшие адреса ОП
Стек до команды
call my_proc
Старшие адреса ОП
Стек после команды
call my_proc
Рис.
Содержимое
до и после выполнения команды вызова процедуры
дальнего типа
[модификатор] можно не указывать: транслятор сам разберется, какую команду CALL
ему нужно сформировать. Если же процедура описана после ее вызова, например,
в конце текущего сегмента или в другом сегменте, то при ее вызове нужно указать
ассемблеру тип вызова, чтобы он мог за один проход правильно сформировать ко-
манду CALL. Значения модификатора такие же, как и у команды ЗМР, за исключе-
нием значения SHORT PTR.
С директивой PROC используются еще несколько директив: ARG, RETURNS, LOCAL,
USES. Их назначение — помочь программисту выполнить некоторые рутинные дей-
ствия при вызове и возврате из процедуры (заодно и повысив надежность кода).
Директивы ARG и RETURNS назначают входным и выходным параметрам процеду-
ры, передаваемым через стек, символические имена. Директива USES в качестве
параметров содержит имена используемых в процедуре регистров. При обработке


224 Глава
Команды
управления
этой директивы ассемблер формирует входной и выходной коды процедуры (из
команд PUSH и POP), обеспечивающие сохранение и восстановление регистров. Ди-
ректива LOCAL предназначена для выделения кадра стека для локальных перемен-
ных, что позволяет экономить память, занимаемую программой в целом. Подроб-
но эти директивы обсуждаются в главе 15.
Необходимо заметить, что в данном разделе приведена информация о порядке
описания процедур, принятом в
Описание и использование процедур
в
имеет особенности, о которых можно узнать из материала главы 15.
Последний и, наверное, самый важный вопрос, возникающий при работе с про-
цедурами, — как правильно передать параметры процедуре вернуть результат?
Этот вопрос тесно связан с концепцией модульного программирования и подроб-
но будет рассматриваться в главе 15. С примерами использования процедур вы
можете познакомиться в листингах подпрограмм, предназначенных для вычисле-
ния четырех основных арифметических действий с двоичными и десятичными
(BCD) числами и находящихся среди прилагаемых к книге файлов в каталоге гла-
вы
Кроме того, вопросы организации рекурсивных и вложенных процедур рас-
смотрены в [8].

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   124   125   126   127   128   129   130   131   ...   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