Imul Умножение целых знаковых чисел
Команда IMUL выполняет умножение целого знакового числа, находящегося в регистре AL (в случае деления на байт) или АХ (в случае деления на слово), на операнд-источник (целое число со знаком). Размер произведения в два раза больше размера сомножителей.
Для однобайтовых операций один из сомножителей помещается в регистр AL; после выполнения операции произведение записывается в регистр АХ.
Для двухбайтовых операций один из сомножителей помещается в регистр АХ; после выполнения операции произведение записывается в регистры DX:AX (в DX - старшая часть, в АХ - младшая).
В качестве операнда-сомножителя можно указывать регистр данных или ячейку памяти; не допускается умножение на непосредственное значение.
Пример 1
mov AL,5 ; Первый сомножитель
mov BL,3 ; Второй сомножитель
imul BL ; AX=OOOFh (произведение)
Пример 2
mov AX,256 ; Первый сомнохитель
mov BX,256 ; Второй сомнохитель
imul BX ; DX=0001h, AX=OOOOh (число 65536)
Пример 3
mov AL,-5 ; AL=FBh
mov BL,3 ; BL=03h
imul BL ; AX=FFFlh (-15)
Команды деления
DIV Деление целых беззнаковых чисел
Команда DIV выполняет деление целого числа без знака, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число без знака). Размер делимого в два раза больше размеров делителя и остатка.
Для однобайтовых операций делимое помещается в регистр АХ; после
выполнения операции частное записывается в регистр AL, а остаток - в регистр АН.
Для двухбайтовых операций делимое помещается в регистр DX:AX (в DX
старшая часть, в АХ - младшая); после выполнения операции частное записывается в регистр АХ, а остаток - в регистр DX.
В качестве операнда-делителя можно указывать регистр данных или ячейку памяти; не допускается деление на непосредственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание с вектором 0.
Пример 1
mov AX,506 ;Делимое
mov BL,50 ;Делитель
div BL ;AL=OAh (частное), AH=06h
;(остаток)
Пример 2
mov DX,1 ;Старшая часть делимого 65537
mov AX,1 ;Младшая часть делимого 65537
mov СХ,256 ;делитель
div СХ ;AX=0100h (частное), OX=0001h
;(остаток)
Idiv Деление целых знаковых чисел
Команда IDIV выполняет деление целого числа со знаком, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число со знаком). Размер делимого в два раза больше размеров делителя и остатка. Оба результата рассматриваются как числа со знаком, причем знак остатка равен знаку делимого.
Для однобайтовых операций делимое помешается в регистр АХ; после выполнения операции частное записывается в регистр AL. а остаток - в регистр АН.
Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX - старшая часть, в АХ - младшая); после выполнения операции частное записывается в регистр АХ, а остаток - в регистр DX.
В качестве операнда-делителя можно указывать регистр данных или ячейку памяти: не допускается деление на непосредственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание через вектор 0.
Пример 1
Mov AX,506 ;Делимое
mov BL,50 ;Делитель
div ;AL=OAh (частное), AH=06h (остаток)
Пример 2
mov DX,1 ;Старшая часть делимого 65537
mov АХ,1 ;Младшая часть делимого 65537
mov CX.256 ;Делитель
div ;AX=0100h (частное), DX=0001h(остаток)
Пример 3
mov AX,-506 ;AX=FE06h, делимое
mov BL,50 ;Делитель
idiv ;AL=F6h (-10), AH=FAh (-6)