Основные команды языка ASSEMBLER
### Команда MUL #########################################################
### Производит умножение аккумулятора и операнда команды. Сомножители
интерпретируются как беззнаковые числа.
В операциях над байтами функцию аккумулятора выполняет регистр AL, а
16-битное произведение образуется в регистре AX. Максимальное значение
произведения равно 255 * 255 = 65025.
Если операнд идентифицирует слово, оно умножается на аккумулятор AX,
а 32-битное произведение формируется в регистрах DX (старшая часть) и AX.
### Если старшая половина произведения не равна нулю, то флажки CF и OF
устанавливаются в единицу. Состояние остальных флажков не определено.
### Форматы команды:
7 0
+-------------------------+ l = 2 байта +----------------+
¦ MUL Регистр ¦ t = 70...77 тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте pегистpа) ¦----------------¦
t = 118:133 такта ¦ 11100 reg ¦
(при слове регистра) +----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ MUL Память ¦ t = (76:83)+ЕА тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте памяти) ¦----------------¦
t = (124:139)+EA тактов¦ mod 100 r/m ¦
(пpи слове памяти) ¦----------------¦
¦ dispL ¦
+----------------¦
¦ dispH ¦
+----------------+
### Примечание:
При умножении на числа, котоpые являются степенями 2, удобнее
пользоваться командой сдвига влево SAL.
### Команда IMUL #########################################################
### Производит умножение аккумулятора и операнда команды. Сомножители
интерпретируются как знаковые числа.
В операциях над байтами функцию аккумулятора выполняет регистр AL, а
16-битное произведение образуется в регистре AX.
Если операнд идентифицирует слово, оно умножается на аккумулятор AX,
а 32-битное произведение формируется в регистрах DX (старшая часть) и AX.
### Если старшая половина произведения не равна 00(0000) или FF(FFFF), то
флажки CF и OF устанавливаются в единицу. Состояние остальных флажков не
определено.
### Форматы команды:
7 0
+-------------------------+ l = 2 байта +----------------+
¦ IMUL Регистр ¦ t = 80:98 тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте pегистpа) ¦----------------¦
t = 128:154 такта ¦ 11101 reg ¦
(при слове регистра) +----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ IMUL Память ¦ t = (86:104)+ЕА тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте памяти) ¦----------------¦
t = (134:160)+EA тактов¦ mod 101 r/m ¦
(при слове памяти) ¦----------------¦
¦ dispL ¦
+----------------¦
¦ dispH ¦
+----------------+
### Команда DIV #########################################################
### Производит деление аккумулятора и его расширения на содержимое операнда
команды. Деление выполняется над числами, интерпретированными как
беззнаковые. Делимое должно быть в 2 раза длиннее делителя.
Байтовые команды делят 16-битовое число, расположенное в аккумуляторе
AX, на 8-битный делитель. Частное результата помещается в регистр AL, а
остаток в регистр AH.
Команда, работающая со словами, делит 32-битовое число, расположенное
в регистре DX (старшая часть) и аккумуляторе AX, на 16-битный делитель.
Частное результата помещается в регистр AX, а остаток в регистр DX.
### Состояние регистра флажков не определено.
### Форматы команды:
7 0
+-------------------------+ l = 2 байта +----------------+
¦ DIV Регистр ¦ t = 80:90 тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте pегистpа) ¦----------------¦
t = 144:162 такта ¦ 11110 reg ¦
(пpи слове pегистpа) +----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ DIV Память ¦ t = (86:96)+ЕА тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте памяти) ¦----------------¦
t = (150:168)+EA тактов¦ mod 110 r/m ¦
(при слове памяти) ¦----------------¦
¦ dispL ¦
+----------------¦
¦ dispH ¦
+----------------+
### Примечание:
Если частное результата превышает разрядность аккумулятора или
делитель равен нулю, генерируется прерывание типа 0, а частное и остаток
не определены. Если нет подпрограммы обработки такого прерывания,
необходимо до операции деления проверить возможность его возникновения.
При делении на числа, котоpые являются степенями 2, удобнее
пользоваться командой сдвига вправо.
### Команда IDIV #########################################################
### Производит деление аккумулятора и его расширения на содержимое операнда
команды. Деление выполняется над числами, интерпретированными как знаковые.
Делимое должно быть в 2 раза длиннее делителя.
Байтовые команды делят 16-битовое число, расположенное в аккумуляторе
AX, на 8-битный делитель. Частное результата помещается в регистр AL, а
остаток в регистр AH.
Команда, работающая со словами, делит 32-битовое число, расположенное
в регистре DX (старшая часть) и аккумуляторе AX, на 16-битный делитель.
Частное результата помещается в регистр AX, а остаток в регистр DX.
### Состояние регистра флажков не определено.
### Форматы команды:
7 0
+-------------------------+ l = 2 байта +----------------+
¦ IDIV Регистр ¦ t = 101:112 тактов ¦ 1111011 w ¦
+-------------------------+ (пpи байте pегистpа) ¦----------------¦
t = 165:184 такта ¦ 11111 reg ¦
(при слове регистра) +----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ IDIV Память ¦ t = (107:118)+ЕА тактов¦ 1111011 w ¦
+-------------------------+ (пpи байте памяти) ¦----------------¦
t = (107:190)+EA тактов¦ mod 111 r/m ¦
(при слове памяти) ¦----------------¦
¦ dispL ¦
+----------------¦
¦ dispH ¦
+----------------+
### Примечание:
Если частное результата превышает разрядность аккумулятора или
делитель равен нулю, генерируется прерывание типа 0, а частное и остаток
не определены. Если нет подпрограммы обработки такого прерывания,
необходимо до операции деления проверить возможность его возникновения.
Если результат отрицательный, частное усекается (в направлении
нуля), а остаток имеет тот же знак, что и делимое. Например:
+---------------------------------------------------+
¦делимое (AX)¦ делитель ¦частное (AL)¦остаток (AH)¦
+------------+------------+------------+------------¦
¦ 7 ¦ 2 ¦ 3 ¦ 1 ¦
¦ 7 ¦ - 2 ¦ - 3 ¦ 1 ¦
¦ - 7 ¦ 2 ¦ - 3 ¦ - 1 ¦
¦ - 7 ¦ - 2 ¦ 3 ¦ - 1 ¦
+---------------------------------------------------+
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|