Все про Assembler українською мовою на сайті net.kr.ua

 

:: Меню ::

Головна
Введення
Архітектура реального режиму
Основи програмування
Команди і алгоритми
Розширені можливості сучасних мікропроцесорів
Система команд процесорів Intel
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
 

:: Лічильники ::

=

 

 

 

 

fff00e50

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

-

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Популярне ::

-


:: Посилання ::

-


 

 

 


Copyright © net.kr.ua, 2019-2025 (assem.us)