Ассемблер и программирование для IBM PC



       

ГЛАВА 5. Определение Данных - часть 6


На рис. 2.1 в главе 2 было показано использование непосредственных операндов. Команда

MOV AX,0123H

пересылает непосредственную шест. константу 0123 в регистр AX. Трехбайтный объектный код для этой команды есть B82301, где B8 обозначает "переслать непосредственное значение в регистр AX", a следующие два байта содержат само значение. Многие команды имеют два операнда: первый может быть регистр или адрес памяти, а второй - непосредственная константа.

------------------------------------------------------------ ------------------------------------------------------------ Рис. 5.2. Дамп сегмента данных.

Использование непосредственного операнда более эффектив но, чем oпределение числовой константы в сегменте данных и организация cсылки на нее в операнде команды MOV, например,

Сегмент данных: AMT1 DW 0123H Сегмент кодов: MOV AX,AMT1

Длина непосредственных операндов

Длина непосредственной константы зависит от длины первого операнда. Например, следующий непосредственный операнд является двухбайтовым, но регистр AL имеет только один байт:

MOV AL,0123H (ошибка)

однако, если непосредственный операнд короче, чем получающий операнд, как в следующем примере

ADD AX,25H (нет ошибки)

то ассемблер расширяет непосредственный операнд до двух байт, 0025 и записывает объектный код в виде 2500.

Ассемблер для IBM PC. Глава 5 110

Непосредственные форматы

Непосредственная константа может быть шестнадцатиричной, напpимер, 0123H; десятичной, например, 291 (которую ассемблер конвертирует в шест.0123); или двоичной, например, 100100011В (которая преобразуется в шест. 0123). Ниже приведен список команд, которые допускают непосредственные операнды:

Команды пересылки и сравнения: MOV, CMP. Арифметические команды: ADC, ADD, SBB, SUB. Команды сдвига: RCL, RCR, ROL, ROR, SHL, SAR, SHR. Логические команды: AND, OR, TEST, XOR.

На рис. 5.3 приведены примеры допустимых команд с непосредственными операндами. В последующих главах будут объяснены команды арифметического переноса, сдвига и логические команды. Поскольку сейчас данные примеры не предназначены для выполнения, в них опущено определение стека и инициализация сегментных регистров. Для создания элементов, длинее чем два байта, можно использовать цикл (см. гл.7) или строковые команды (см. гл.11).




Содержание  Назад  Вперед