→ Пошук по сайту       Увійти / Зареєструватися

Команди асемблера для Intel: MUL, NEG, NOP, NOT, OR, OUT

MUL Множення цілих чисел без знаку

Команда inul виконує множення цілого числа без знаку, що знаходиться в регістрі AL (у разі множення на байт) або АХ (у разі множення на слово), на операнд-джерело (ціле число без знаку). Розмір твору в два рази більше розміру співмножників.

Для однобайтових операцій один із співмножників поміщається в регістр AL; після виконання операції твір записується в регістр АХ.

Для двобайтових операцій один із співмножників поміщається в регістр АХ; після виконання операції твір записується в регістри Dx:ax (у DX - старша частина, в АХ - молодша). Попередній вміст регістра DX затирається.

Якщо вміст регістра АН після однобайтового множення або вміст регістра DX після двобайтового множення не рівні 0, прапори CF і OF встановлюються в 1. Інакше обидва прапори скидаються в 0.

Як операнд-співмножник команди mul можна указувати регістр (окрім сегментного) або елемент пам'яті; не допускається множення на безпосереднє значення. Команда впливає на прапори OF і CF.

Приклад 1

mov Al,5 ;Первый співмножник
mov Bl,3 ;Второй співмножник
mul BL ;AX=000Fh, твір

Приклад 2

mov Ax,256 ;Первый співмножник
mov Bx,256 ;Второй співмножник
mul BX ;DX=0001h, Ax=0000h
;(Dx:ax=65536, твір)

Приклад 3

;У полях даних
coef db 100 ;Первый співмножник
datal db 126 ;Второй співмножник
mov Al,datal;AL=7Eh=126
mul coef;AX=3138h=12600,произведение

Приклад 4

;B полях даних
coef dw 5000 ;Первый співмножник
datal dw 1200 ;Второй співмножник
mov Ax,datal;AX=4BOh=1200
mul coef ;DX=005Bh, Ax=8d80h
;Проїзведеніє=вх:ax=
;5B8D80h=6000000

Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів. При цьому, якщо вказаний операнд є 32-байтовою величиною, то результат розміщується в регістрах Edx:eax.

Приклад 1

mov Eax,200h ;Первый співмножник
mov Esi,l000000lh ;Второй співмножник
mul ESI ;Произведение у Edx:eax
;Edx=00000020h,eax=00000200h

Приклад 2

; У полях даних
nmbs db 15,22,36,78,84,98,100
;В програмному сегменті
mov Edx,offset nmbs ;Относительный адреса
movzx Edx,dx ;массива
mov Ecx,5 ;Смещение у масиві
mov Al,10 ;Множитель
mul byte ptr [EDX] [ЕСХ] ;Умножаем елемент
;масиву з індексом 5 (98)
;на AL (10) Результат в
;Ах=980

NEG Зміна знаку, доповнення до 2

Команда neg виконує віднімання цілочисельного операнда із знаком з нуля, перетворюючи позитивне число на негативне і навпаки. Початковий операнд затирається. Як операнд можна указувати регістр (окрім сегментного) або елемент пам'яті розміром як в байт, так і в слово. Не допускається використовувати як операнд безпосереднє значення. Команда впливає на прапори OF, SF, ZF, AF, PF і CF.

Приклад 1

mov Ах,0 0 01
neg AX;AX=FFFFh=-1

Приклад 2


mov BX-2;BX=FFFEh=-2
neg BX ;BX=0002h

Приклад 3

;У полях даних
nmb dw 800lh ;Если число із знаком
;то -32767
;В програмному сегменті
neg nmb;nmb=7FFFh=+32767

Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів.

Приклад

mov ECX, 5
neg ECX;ECX=FFFFFFFBh=-5

NOP Неодружена команда

По команді пір процесор не виконує ніяких дій, окрім збільшення на 1 вмісту покажчика команд IP (оскільки команда пір займає 1 байт). Команда іноді використовується в налагоджувальних цілях, щоб "забити" якісь непотрібні команди, не змінюючи довжину завантажувального модуля або, навпаки, залишити місце в завантажувальному модулі для подальшої вставки команд. У ряді випадків команди пір включаються в текст об'єктного модуля транслятором. Команда не має ні параметрів, ні операндів і не впливає на прапори процесора.

NOT Інверсія, доповнення до 1, логічне заперечення

Команда not виконує інверсію бітів вказаного операнда, замінюючи 0 на 1 і навпаки. Як операнд можна указувати регістр (окрім сегментного) або елемент пам'яті розміром як в байт, так і в слово. Не допускається використовувати як операнд безпосереднє значення. Команда не впливає на прапори процесора.

Правила побітової інверсії:

Операнд-біт 0 1
Біт результату 1 0

Приклад 1

mov Ax,0ffffh
not AX ;AX=0000h

Приклад 2

mov Si,5551h
not SI ;SI=AAAEh

Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів.

Приклад

mov Eax,0c00sff00h
not EAX ;EAX=3FFC00FFh

OR що Логічне ВКЛЮЧАЄ АБО

Команда or виконує операцію логічного (побітового) складання двох операндів. Результат заміщає перший операнд (приймач); другий операнд (джерело) не змінюється. Як перший операнд можна указувати регістр (окрім сегментного) або елемент пам'яті, як другий - регістр (окрім сегментного), елемент пам'яті або безпосереднє значення, проте не допускається визначати обидва операнди одночасно як елементи пам'яті. Операнди команди or можуть бути байтами або словами. Команда впливає на прапори OF, SF, ZF, PF і CF, при цьому прапори CF і OF завжди скидаються в 0.

Правила побітового складання:

Перший операнд-біт 0101
Другий операнд-біт 0011
Біт результату 0111

Приклад 1

mov Ax,000fh
mov Bx,00f0h
or Ax,bx ;AX=00FFh, Bx=00f0h

Приклад 2

mov Ax,000fh
mov Bx,00f7h
or Ax,bx ;AX=00FFh, Bx=00f7h

Приклад 3

mov Ax,000fh
or Ax,8001h ;AX=800Fh

Приклад 4

; У полях даних
mask db 80h
;B програмному сегменті
mov Ch,17h
or Ch,mask ;CH=97h

Допустиме використання 32-бітових операндів і додаткових режимів адресації 32-розрядних процесорів.

Приклад

;У полях даних
mem dd 80000000h
; У програмному сегменті
or mem,0c0h ;mem=800000C0h

OUT Вивід в порт

Команда out виводить в порт, що указується першим операндом, байт або слово відповідно з регістра AL або АХ. Адреса порту поміщається в регістр DX. Якщо адреса порту не перевищує 255, він може бути вказаний безпосереднім значенням. Вказівка регістра-джерела (AL або АХ) обов'язкова, хоча з іншими регістрами команда out не працює, і їх указувати не можна. Команда не впливає на прапори процесора.

Приклад 1

mov Al,20h ;Команда кінця переривання (EOI)
out 20h,al ;Вывод команди EOI в порт
;20h контроллера переривань

Приклад 2

mov Dx,3ceh ; Адреса порту
mov Al,5 ;Данное
out Dx,al ;Вывод байта з AL в порт 3ceh

Допустиме використання як операнд-джерело розширеного регістра ЕАХ (якщо пристрій, що адресується, дозволяє записати в його порт подвійне слово).

Приклад

mov Еах,1а008ррзh;Пересылаемое дане
mov Dx,345h ;Адрес порту
out Dx,eax ;Вывод у порт подвійного слова

загрузка...
Сторінки, близькі за змістом