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

D

DIV Деление целых чисел без знака

Команда div выполняет деление целого числа без знака, находящегося в регистрах АХ (в случае деления на байт) или DX:AX (в случае деления на слово), на операнд-источник (целое число без знака). Размер делимого в два раза больше размеров делителя и остатка.

Для однобайтовых операций делимое помещается в регистр АХ; после выполнения операции частное записывается в регистр AL, остаток – в регистр АН.

Для двухбайтовых операций делимое помещается в регистры DX:AX (в DX – старшая часть, в АХ – младшая); после выполнения операции частное записывается в регистр АХ, остаток – в регистр DX.

В качестве операнда-делителя команды div можно указывать регистр (кроме сегментного) или ячейку памяти; не допускается деление на непосредственное значение. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание с вектором 0. Команда не воздействует на флаги процессора.

Команду div можно использовать для целочисленного деления неупакованного двоично-десятичного числа в регистре АХ не неупакованный двоично-десятичный делитель, если перед ней выполнить команду aad (см. пример 3).

Пример 1:

mov AX,506; Делимое
mov BL,50; Делитель
div BL; AL=0Ah (частное), AH=06h (остаток)

Пример 2:

; В полях данных
long dd 65537; Делимое
;В программном сегменте
mov DX,word ptr long+2; DX=0001h, старшая часть делимого
mov AX,word ptr long; AX=0001h, младшая часть делимого
mov CX,256; Делитель
div CX; AX=0100h (частное),
;DX=0001h (остаток)

Пример 3:

mov AX,0807h; Неупакованное BCD 87
mov DL,09h; Неупакованное BCD 9
aad; AX=0057h=87
div DL; AX=0609h, т.е. 9 и 6 в остатке

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › D Допустимо использование 32-битовых операндов и дополнительных режимов адресации 32-разрядных процессоров. При этом, если делитель представляет 32-битовую величину, то возможен только один вариант команды деления, когда делимое находится в парс регистров EDX:EAX. В этом случае частное будет помещено в регистр ЕАХ, остаток – в EDX.

Пример:

mov ЕАХ, 0FFFFFFFh; Младшая часть делимого
mov EDX,0; Старшая часть делимого
mov EBX,256; Делитель
div EBX; Частное в EAX=000FFFFFh,
;Остаток в EDX=000000FFh
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.