HLT Останов
Команда hlt припиняє виконання програми і переводить процесор в стан останову. Робота процесора поновлюється після операції запуску, а також у разі приходу немаскованого або дозволеного маскованого переривань.
IDIV Ділення цілих чисел із знаком
Команда IDIV виконує ділення цілого числа із знаком, що знаходиться в регістрах АХ (у разі ділення на байт) або Dx:ax (у разі ділення на слово), на операнд-джерело (ціле число із знаком). Розмір ділимого в два рази більше розмірів дільника і залишку. Обидва результати розглядаються як числа із знаком, причому знак залишку дорівнює знаку ділимого.
Для однобайтових операцій ділиме поміщається в регістр АХ; після виконання операції ділення приватне записується в регістр AL, залишок - в регістр АН.
Для двобайтових операцій ділиме поміщається в регістри Dx:ax (у DX - старша частина, в АХ - молодша); після виконання операції ділення приватне записується в регістр АХ, залишок - в регістр DX.
Як операнд-дільник команди idiv можна указувати регістр даних або елемент пам'яті; не допускається ділення на безпосереднє значення. Якщо дільник дорівнює 0, або якщо приватне не поміщається в призначений регістр, збуджується переривання через вектор 0. Команда не впливає на прапори процесора.
Приклад 1
mov Ax,506 ;Делимое
mov Bl,50 ;Делитель
idiv BL ;AL=0Ah (приватне), Ah=06h
; (залишок)
Рис.П3. Стан стека після входу в підпрограму і виконання команди enter8,0(на малюнку адреси осередків зменшуються в низ)
Приклад 2
;У полях даних
long dd 0f0007h ;Делимое
; У програмному сегменті
mov Dx,word ptr long+2;DX=000Fh, старша
;частина ділимого
mov Ax,word ptr long;AX=0007h, молодша
;частина ділимого
mov Cx,256 ;Делитель
idiv СХ ;AX=0F00h (приватне),
;Dx=0007h (залишок)
Приклад 3
mov AX-506 ;AX=FE06h, ділиме
mov Bl,50 ;Делитель
idiv BL ;AL=F6h (-10), Ah=fah (-6)
Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів. При цьому, якщо дільник представляє 32-бітову величину, то можливий тільки один варіант команди ділення, коли ділиме знаходиться в парс регістрів Edx:eax. В цьому випадку приватне буде поміщене в регістр БАХ, залишок - в EDX.
Приклад
; У полях даних
dvd dq -100001 Ділиме
;B програмному сегменті
mov Eax,dword ptr dvd Eax=fffe795fh
;(молодша частина ділимого)
mov Edx,dword ptr dvd+4 Edx=ffffffffh (старша
;частина ділимого)
mov Ebx,50 Дільник
idiv EBX Приватне в Eax=fffff830h=
;-2000, залишок вEdx=ffffffffh=-1
IMUL Множення цілих чисел із знаком
Команда IMUL виконує множення цілого числа із знаком, що знаходиться в регістрі AL (у разі множення на байт) або АХ (у разі множення на слово), на операнд-джерело (ціле число із знаком). Розмір твору в два рази більше розміру співмножників.
Для однобайтових операцій один із співмножників поміщається в регістр AL; після виконання операції твір записується в регістр АХ.
Для двобайтових операцій один із співмножників поміщається в регістр АХ; після виконання операції твір записується в регістри Dx:ax (у DX - старша частина, в АХ - молодша).
Як операнд-співмножник команди imul можна указувати регістр (окрім сегментного) або елемент пам'яті; не допускається множення на безпосереднє значення. Команда впливає на прапори OF і CF. Якщо АН або DX є просто знаковим розширенням AL або АХ, відповідно (тобто результат множення із знаком вірний), OF і CF скидаються в 0; інакше (результат із знаком не поміщається в АХ або Dx:ax) OF і CF встановлюються в 1.
Приклад 1
mov Al,5 ;Первый співмножник
mov Bl,3 ;Второй співмножник
imul BL ;AX=000Fh (твір)
Приклад 2
mov Ax,256 ;Первый співмножник
mov Bx,256 ;Второй співмножник
imul BX ;DX=0001h, Ax=0000h
;(число 65536)
Приклад 3
mov AL-5 ;AL=FBh
mov Bl,3 ;BL=03h
imul BL ;AX-'FFF1h (-15)
Допустиме використання 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 ;Первый співмножник
mov Esi,100000000 ;Второй співмножник
imul ESI ;EDX=FFFFFFFFh,
;Eax=fa0alf00h
;Результат=-100000000
Приклад 2
;У полях даних
ор2 dd 100h ;Первый співмножник
; У програмному сегменті
mov Eax,400000h ;Второй співмножник
imul Eax,op2 ;EAX=40000000h
Приклад 3
mov Bx,300h
imul АХ, Вх,4;AX=300h*4=0C00h
IN Введення з порту
Команда in вводить в регістр AL або АХ відповідно байт або слово з порту, що указується другим операндом. Адреса порту поміщається в регістр DX. Якщо адреса порту не перевищує 255, він може бути вказаний безпосереднім значенням. Вказівка регістра-приймача (AL або АХ) обов'язкова, хоча з іншими регістрами команда in не працює, і їх указувати не можна. Команда не впливає на прапори процесора.
Приклад 1
in AL, 60h ;Ввод байта з порту 60h
Приклад 2
mov Dx,3d5h ;Адрес порту
in Al,dx ;Ввод байта з порту 3d5h
Допустиме використання як операнд-приймач розширеного регістра ЕАХ (якщо пристрій, що адресується, дозволяє прочитати з його порту подвійне слово).
Приклад
mov Dx,345h ;Адрес порту
in Eax,dx
INC Інкремент (збільшення на 1)
Команда inc додає 1 до операнда, як який можна указувати регістр (окрім сегментного) або елемент пам'яті розміром як в байт, так і в слово. Не допускається використовувати як операнд безпосереднє значення. Операнд інтерпретується як число без знаку. Команда впливає на прапори OF, SF, ZF, AF і PF. Команда не впливає на прапор CF; якщо потрібна дія на цей прапор, необхідно використовувати команду add op,l.
Приклад 1
mov Ax,0563h
inc AX ;AX=0564h
Приклад 2
mov Bh,15h
inc BH ;BH=16h
Приклад 3
mov Ax,a5ffh
inc AL ;AX=A500h
inc AH ;AX=A600h
Приклад 4
mov Ax,0ffffh
inc AX ;AX=0000h, Zf=1, Cf=0
;Для порівняння:
mov Cx,0ffffh
add Cx,1 ;CX=0000h, Zf=1, Cf=1
Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів.
Приклад
;У полях даних
mem dd 12345678h
; У програмному сегменті
inc mem ;mem=12345679h
загрузка...