Здавалка
Главная | Обратная связь

Теоретические указания



JMP метка - используется в программе для организации безусловного перехода как внутри текущего сегмента команд, так и за его пределы. При определенных условиях в защищенном режиме работы команда jmp может использоваться для переключения задач.

Алгоритм работы: команда jmp в зависимости от типа своего операнда изменяет содержимое либо только одного регистра eip, либо обоих регистров cs и eip:

- если операнд в команде jmp — метка в текущем сегменте команд (a8, 16, 32), то ассемблер формирует машинную команду, операнд которой является значением со знаком, являющимся смещением перехода относительно следующей за jmp команды. При этом виде перехода изменяется только регистр eip/ip;

- если операнд в команде jmp — символический идентификатор ячейки памяти (m16, 32, 48), то ассемблер предполагает, что в ней находится адрес, по которому необходимо передать управление.

Для понимания различий механизмов перехода в реальном и защищенном режимах нужно помнить следующее. В реальном режиме микропроцессор просто изменяет cs и eip/ip в соответствии с содержимым указателя в памяти. В защищенном режиме микропроцессор предварительно анализирует байт прав доступа AR в дескрипторе, номер которого определяется по содержимому сегментной части указателя. В зависимости от состояния байта AR микропроцессор выполняет либо переход, либо переключение задач.

Применение: команду jmp применяют для осуществления ближних и дальних безусловных переходов без сохранения контекста точки перехода.

m1: ; метка

… ; выполняемые команды

jmp m1 ; возврат на метку

CALL имя_процедуры - передача управления близкой или дальней процедуре с запоминанием в стеке адреса точки возврата; либо переключение задач.

Алгоритм работы: определяется типом операнда:

метка ближняя — в стек заносится содержимое указателя команд eip/ip и в этот же регистр загружается новое значение адреса, соответствующее метке;

метка дальняя — в стек заносится содержимое указателя команд eip/ip и cs. Затем в эти же регистры загружаются новые значения адресов, соответствующие дальней метке;

r16, 32 или m16, 32 — определяют регистр или ячейку памяти, содержащие смещения в текущем сегменте команд, куда передается управление. При передаче управления в стек заносится содержимое указателя команд eip/ip;

указатель на память — определяет ячейку памяти, содержащую 4 или 6-байтный указатель на вызываемую процедуру. Структура такого указателя 2+2 или 2+4 байта.

RET число - возврат управления из процедуры вызывающей программе.

Алгоритм работы: работа команды зависит от типа процедуры:

- для процедур ближнего типа — восстановить из стека содержимое eip/ip;

- для процедур дальнего типа — последовательно восстановить из стека содержимое eip/ip и сегментного регистра cs.

- если команда ret имеет операнд, то увеличить содержимое esp/sp на величину операнда число; при этом учитывается атрибут режима адресации — use16 или use32:

если use16, то sp=(sp+число), то есть указатель стека сдвигается на число байт, равное значению число;

если use32, то sp=(sp+2*число), то есть указатель стека сдвигается на число слов, равное значению число.

Применение: команду ret необходимо применять для возврата управления вызывающей программе из процедуры, управление которой было передано по команде call. На самом деле микропроцессор имеет три варианта команды возврата ret - это ret, ее синоним retn, а также команда retf. Они отличаются типами процедур, в которых используются. Команды ret и retn служат для возврата из процедур ближнего типа. Команда retf — команда возврата для процедур дальнего типа. Какая конкретно команда будет использоваться, определяется компилятором; программисту лучше использовать команду ret и доверить транслятору самому сгенерировать ее ближний или дальний вариант. Количество команд ret в процедуре должно соответствовать количеству точек выхода из нее. Некоторые языки высокого уровня, к примеру Pascal, требуют, чтобы вызываемая процедура очищала стек от переданных ей параметров. Для этого команда ret содержит необязательный параметр число, который, в зависимости от установленного атрибута размера адреса, означает количество байт или слов, удаляемых из стека по окончании работы процедуры.

PRIVATEmy_proc proc

...

retn

endp

Задания

1. Написать программу, которая задает вопрос: «Сейчас день? (Да/Нет)». По результату ответа на экран выводится одно из двух сообщений: «Добрый день» или «Добрый вечер».

2. Написать программу преобразования строчных букв в прописные.

 

Вопросы для самоконтроля

1. Для чего в программе используется JMP метка.

2. Алгоритм работы JMP метки.

3. Что представляет собой RET число?

4. Алгоритм работы RET числа.

5. Для чего в программе используется команда retf?







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.