Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
175-199.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
379.75 Кб
Скачать

Безусловные переходы

Предыдущее обсуждение выявило некоторые детали механизма перехода. Коман-

ды перехода модифицируют регистр указателя команды EIP/IP и, возможно, сег-

ментный регистр кода CS. Что именно должно подвергнуться модификации,

зависит:

Безусловные переходы 215

••• от типа операнда в команде безусловного перехода (ближний или дальний);

от модификатора, который указывается перед адресом перехода в команде пе-

рехода и может принимать следующие значения (сам адрес при прямом пере-

ходе находится непосредственно в команде, а при косвенном — в регистре или

ячейке памяти):

П NEAR PTR — прямой переход на метку внутри текущего сегмента кода, при

этом модифицируется только регистр EIP/IP (в зависимости от заданного

типа сегмента кода use!6 или use32) на основе указанного в команде адреса

(метки) или выражения, использующего символ извлечения значения счет-

чика адреса команд ($);

П FAR PTR — прямой переход на метку в другом сегменте кода, при этом адрес

перехода задается в виде непосредственного операнда или адреса (метки)

и состоит из 16-разрядного селектора и 16/32-разрядного смещения, кото-

рые загружаются, соответственно, в регистры CS и EIP/IP;

D WORD PTR — косвенный переход на метку внутри текущего сегмента кода, при

этом модифицируется (значением смещения размером 16 или 32 бита из

памяти по указанному в команде адресу или из регистра) только регистр

EIP/IP;

D DWORD PTR — косвенный переход на метку в другом сегменте кода, при этом

модифицируются (значением из памяти — и только из памяти, из регистра

нельзя) оба регистра, CS и EIP/IP (первое слово/двойное слово адреса пере-

хода, представляющее собой смещение, загружается в EIP/IP; второе/третье

слово — в CS).

Команда безусловного перехода

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

возврата:

jmp [модификатор] адрес_перехода

Здесь адрес_перехода представляет метку или адрес области памяти, в которой

находится указатель перехода.

Всего в системе команд процессора есть несколько кодов машинных команд

безусловного перехода JMP. Их различия определяются дальностью перехода

и способом задания целевого адреса. Дальность перехода определяется местопо-

ложением операнда адрес_перехода. Этот адрес может находиться в текущем сег-

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

внутрисегментным, или близким, во втором — межсегментным, _______или дальним.

Внутрисегментный переход предполагает, что изменяется только содержимое

регистра EIP/IP.

Команды условного перехода и флаги

Мнемоническое обозначение некоторых команд условного перехода отражает на-

звание флага, с которым они работают, и имеет следующую структуру: первым идет

символ ≪j≫ (jump ~ переход), вторым — либо обозначение флага, либо символ от-

рицания ≪п≫, после которого стоит название флага. Такая структура команды от-

ражает ее назначение. Если символа ≪п≫ нет, то проверяется состояние флага и,

если он равен 1, производится переход на метку перехода. Если символ ≪п≫ при-

сутствует, то проверяется состояние флага на равенство 0 и в случае успеха произ-

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

вия переходов приведены в табл. 10.3. Эти команды можно использовать после

любых команд, изменяющих указанные флаги.

Таблица 10.3. Команды условного перехода и флаги

Если внимательно посмотреть на табл. 10.2 и 10.3, видно, что многие команды

условного перехода в них эквивалентны, так как в них анализируются одинаковые

флаги.

В листинге 10.1 приведен пример программы, производящей в строке симво-

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

осмысленного рассмотрения этого примера вспомним ASCII-коды, соответствую-

щие этим буквам (см. главу 6). Строчные и прописные буквы в таблице ASCII упо-

рядочены по алфавиту. Строчным буквам соответствует диапазон кодов 61h-7ah,

прописным — 41h-5ah. Для того чтобы понять идею, лежащую в основе алгоритма

преобразования, достаточно сравнить представления соответствующих прописных

и строчных букв в двоичном виде:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]