Иллюстрированный самоучитель по Assembler


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.




Начало  Назад  Вперед



Книжный магазин