 |
::
Меню :: |
 |
|
|
 |
::
Друзі :: |
 |
|
|
 |
::
Лічильники :: |
 |
|
|
|
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
-
|
 |
::
Наша кнопка :: |
 |
|
 |
Отримати код:
|
Підтримайте наш сайт і розмістіть нашу
кнопку на своєму ресурсі. |
|
|
 |
::
Популярне :: |
 |
|
|
 |
:: Посилання :: |
 |
|
|
|