Добавил:
vanya.tagaschev@ya.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
21.03.2021
Размер:
609.49 Кб
Скачать

CALL FAR - вызов подпрограммы, находящейся в другом сегменте.

Операнды аналогичны соответствующим командам перехода, все команды вызова безусловны.

- команды возврата:

RET NEAR - близкий выход из подпрограммы,

RET FAR - дальний выход из подпрограммы.

Команды JMP просто изменяют текущее содержимое счетчика команд (если переход дальний, то и содержимое сегментного регистра СP) на новое, указанное в операнде.

Близкий вызов CALL сохраняет текущее значение регистра IP в стеке и записывает в IP новое, указанное в команде, значение. Дальний вызов CALL FAR, задает новые значения сегмента и смещения для дальнейшего выполнения программы и сохраняет в стеке как регистр IP, так и регистр CS. Близкий непосредственный вызов – это относительный переход, использующий двухбайтовое поле смещения.

Все остальные команды вызова - абсолютные переходы. Непосредственный вызов CALL FAR требует четырехбайтовое поле операнда для указания новых значений для регистров С5 и IP. Косвенные близкие вызовы типа загружают однословный операнд в регистр IP. Дальние вызовы загружают двойное слово из памяти в пару регистров CS:IP; первое слово загружается в регистр IP, а второе - в регистр CS. Если команда указывает регистр в качестве операнда косвенного далекого вызова, результат непредсказуем; микропроцессор 8086 берет новое значение регистра CS неизвестно откуда. Ни в коем случае нельзя использовать эту модификацию команды.

Командам CALL соответствуют команды возврата RET. Все возвраты - косвенные переходы, поскольку они извлекают адрес перехода из вершины стека. Близкий возврат извлекает из стека одно слово и помещает его в регистр IP, а далекий возврат извлекает два слова, помещая слово из меньшего адреса в регистр IP, а слово из большего адреса в регистр CS.

Программы могут модифицировать возвраты как ближнего, так и дальнего типа, указывая параметр счетчика байтов. Команда возврата прибавляет его значение к указателю стека после извлечения из него адреса (адресов) возврата. Такая команда позволяет программе удалять параметры из стека без использования специальных команд POP; тем самым подчеркивается, что стек - носитель передаваемых подпрограмме параметров.

Пример команды:

RET FAR 2

ЗАДАНИЕ №3

cseg

segment

org

100h

start

metka:

mov

cx

65535

mov

ah

,9

mov

dx

, offset string

int

21h;

loop metka

string db "hi"

 

 

mov

ah

,10h;

int

16h

ЗАДАНИЕ №4

.586

 

 

 

 

 

 

 

 

 

 

.model flat, stdcall

 

.stack 4096

 

 

.data

 

 

.code

 

 

proc_1 proc

;

начало процедуры

 

 

 

 

 

 

 

 

 

push

ebp

 

 

 

 

 

;

пролог: сохранение EBP

mov

ebp

,

esp

 

 

;

пролог: инициализация EBP

mov

eax

, [

ebp

+8]

;

доступ к аргументу 4

 

 

 

 

 

 

 

 

 

 

 

mov ebx, [ebp+12] ; доступ к аргументу 3 mov ecx, [ebp+16] ; доступ к аргументу 2

pop

ebp

 

; эпилог: восстановление EBP

ret 12

 

proc_1 endp

 

main proc

 

push 2

 

push 3

 

push 4

 

call proc_1

 

ret

 

main endp

 

end main

 

Вывод: Получено освоение принципов работы с битовой информацией и форматом представления данных. Приобретение навыков организации подпрограмм и безусловных переходов.

Соседние файлы в папке Тамьяров А. В.