HLT Останов
Команда hlt прекращает выполнение программы и переводит процессор в состояние останова. Работа процессора возобновляется после операции запуска, а также в случае прихода немаскируемого или разрешенного маскируемого прерываний.
IDIV Деление целых чисел со знаком
Команда IDIV выполняет деление целого числа со знаком, находящегося в регистрах
АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник
(целое число со знаком). Размер делимого в два раза больше размеров делителя
и остатка. Оба результата рассматриваются как числа со знаком, причем знак остатка
равен знаку делимого.
Для однобайтовых операций делимое помещается в регистр АХ; после выполнения
операции деления частное записывается в регистр
AL, остаток - в регистр АН.
Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX - старшая
часть, в АХ - младшая); после выполнения операции деления частное записывается
в регистр АХ, остаток - в регистр DX.
В качестве операнда-делителя команды idiv можно указывать регистр данных или
ячейку памяти; не допускается деление на непосредственное значение. Если делитель
равен 0, или если частное не помещается в назначенный регистр, возбуждается
прерывание через вектор 0. Команда не воздействует на флаги процессора.
Пример 1
mov AX,506 ;Делимое
Рис.П3. Состояние стека после входа в подпрограмму и выполнения команды enter8,0(на рисунке адреса ячеек уменьшаются в низ)
Пример 2
;В полях данных
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. При этом, если делитель представляет 32-битовую величину, то возможен только один вариант команды деления, когда делимое находится в парс регистров EDX:EAX. В этом случае частное будет помещено в регистр БАХ, остаток - в EDX.
Пример
; В полях данных
IMUL Умножение целых чисел со знаком
Команда IMUL выполняет умножение целого числа со знаком, находящегося в регистре
AL (в случае умножения на байт) или АХ (в случае умножения на слово), на операнд-источник
(целое число со знаком). Размер произведения в два раза больше размера сомножителей.
Для однобайтовых операций один из сомножителей помещается в регистр
AL; после
выполнения операции произведение записывается в регистр АХ.
Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после
выполнения операции произведение записывается в регистры DX:AX (в DX - старшая
часть, в АХ - младшая).
В качестве операнда-сомножителя команды imul можно указывать регистр (кроме
сегментного) или ячейку памяти; не допускается умножение на непосредственное
значение. Команда воздействует на флаги OF и
CF. Если АН или DX представляют
собой просто знаковое расширение AL или АХ, соответственно (т.е. результат умножения
со знаком верен), OF и CF сбрасываются в 0; в противном случае (результат со
знаком не помещается в АХ или DX:AX) OF и CF устанавливаются в 1.
Пример 1
mov AL,5 ;Первый сомножитель
Пример 2
mov AX,256 ;Первый сомножитель
Пример 3
mov AL,-5 ;AL=FBh
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. Имеются также варианты команды с двумя и тремя операндами.
Для команды imul с одним операндом второй сомножитель должен располагаться в
AL, АХ или ЕАХ. Процессор выбирает размерность второго сомножителя, исходя из
размерности первого, указанного в качестве операнда. 16-, 32- или 64-битовый
знаковый результат помещается в регистры АХ, DX:AX или
EDX:EAX, соответственно.
Если после операции умножения содержимое АН, DX или EDX является лишь знаковым
расширением AL, АХ или ЕАХ, соответственно, то флаги CF и OF сбрасываются в
0. В противном случае они устанавливаются в 1.
Для команды imul с двумя операндами их произведение записывается в первый операнд;
второй операнд не изменяется. В качестве первого операнда могут выступать 16-
или 32-разрядные регистры общего назначения; в качестве второго операнда - 16-
или 32-разрядные регистры общего назначения, 16- или 32-битовые ячейки памяти
или непосредственное значение. Оба операнда должны иметь один размер. Если результат
умножения помещается в первый операнд, флаги CF и OF сбрасываются в 0. В противном
случае они устанавливаются в 1.
Для команды imul с тремя операндами произведение второго и третьего операндов
записывается в первый операнд. В качестве первого операнда могут выступать 16-
или 32-разрядные регистры общего назначения; в качестве второго операнда - 16-
или 32-разрядные регистры общего назначения или 16- или 32-битовые ячейки памяти;
в качестве третьего операнда - только непосредственное значение. Два первых
операнда должны иметь один размер. Если результат умножения помещается в первый
операнд, флаги CF и OF сбрасываются в 0. В противном случае они устанавливаются
в 1.
Пример 1
mov EAX,-1 ;Первый сомножитель
Пример 2
;В полях данных
Команда in вводит в регистр AL или АХ соответственно байт или слово из порта,
указываемого вторым операндом. Адрес порта помещается в регистр
DX. Если адрес
порта не превышает 255, он может быть указан непосредственным значением. Указание
регистра-приемника (AL или АХ) обязательно, хотя с другими регистрами команда
in не работает, и их указывать нельзя. Команда не воздействует на флаги процессора.
Пример 1
in AL, 60h ;Ввод байта из порта 60h
Пример 2
mov DX,3D5h ;Адрес порта
Допустимо использование в качестве операнда-приемника расширенного регистра ЕАХ (если адресуемое устройство позволяет прочитать из его порта двойное слово).
Пример
mov DX,345h ;Адрес порта
INC Инкремент (увеличение на 1)
Команда inc прибавляет 1 к операнду, в качестве которого можно указывать регистр
(кроме сегментного) или ячейку памяти размером как в байт, так и в слово. Не
допускается использовать в качестве операнда непосредственное значение. Операнд
интерпретируется как число без знака. Команда воздействует на флаги
OF, SF, ZF, AF и PF. Команда не воздействует на флаг
CF; если требуется воздействие
на этот флаг, необходимо использовать команду add
op,l.
Пример 1
mov AX,0563h
Пример 2
mov BH,15h
Пример 3
mov AX,A5FFh
Пример 4
mov AX,0FFFFh
Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров.
Пример
;В полях данных