Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Команды передачи управления.




 

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

Команды передачи управления не воздействуют на регистр флагов.

а) команды вызова процедуры CALL и возврата из процедуры RET

Команды, обеспечивающие выполнение процедур, должны выполнять три функции:

1. Обеспечить сохранение содержимого указателя команд IP. Когда процедура исполнена, находившийся в этом указателе адрес (адрес возврата) используется МП для возврата к месту вызова.

2. Заставить МП начать исполнение процедуры.

3. Использовать сохраненное содержимое указателя команд IP для возврата в программу и обеспечить продолжение ее исполнения с этого места.

Эти функции выполняются двумя командами: CALL (call a procedure

- вызвать процедуру) RET (return from procedure - возвратиться из процедуры).

Команда CALL помещает в стек адрес возврата, занимающий 16 битов, если процедура определена с атрибутом NEAR, и 32 бита, если она определена с атрибутом FAR. Команда CALL имеет формат

CALL имя,

где "имя" - имя вызываемой процедуры. Если "имя" имеет атрибут NEAR, то команда CALL помещает смещение адреса следующей команды в стек. Если процедура "имя" имеет атрибут FAR, то команда CALL помещает в стек содержимое регистра CS, а затем смещение адреса.

После сохранения адреса возврата команда CALL загружает смещение адреса метки "имя" в указатель команд IP. Если процедура имеет атрибут FAR, то команда CALL загружает также номер блока метки "имя" в регистр CS.

Команда RET заставляет МП возвратиться из процедуры в программу, вызвавшую эту процедуру, делая это "откатом" всего, что сделала команда CALL. Команда RET обязательно должна быть последней командой процедуры, исполняемой МП.

Команда RET извлекает из стека адрес возврата. Если процедура имеет атрибут NEAR, то команда RET извлекает из стека одно слово и помещает его в указатель команд IP. Если процедура имеет атрибут FAR, то команда RET извлекает из стека два слова: сначала смещение адреса для загрузки в указатель команд IP, а затем номер блока для загрузки в регистр CS.

Можно осуществить и косвенный вызов процедуры через регистр или ячейку памяти. При косвенных вызовах через ячейку памяти МП извлекает значение указателя команд для процедуры из сегмента данных, если не используется регистр ВР или не указана замена сегмента. Если для адресации ячейки памяти используется регистр ВР, то МП извлечет значение указателя команд из сегмента стека. Пример:

CALL BX

В данном случае регистр ВХ содержит смещение адреса процедуры относительно регистра сегмента CS.

Процедуру с атрибутом FAR можно вызвать косвенно, используя переменную размером двойное слово:

CALL DWORD PTR [BX]

CALL DWORD PTR SS:MEM_DWORD[SI]






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных