Справочник по языку Ассемблера IBM PC

     

Деление чисел без знака


Для деления чисел без знака предназначена команда

div делитель

Делитель может находиться в памяти или в регистре и иметь размер 8, 16 или 32 бит. Местонахождение делимого фиксировано и так же, как в команде умножения, зависит от размера операндов. Результатом команды деления являются значения частного и остатка.

Варианты местоположения и размеров операндов операции деления показаны в табл. 3.

Таблица 3. Расположение операндов и результата при делении



Делимое Делитель Частное Остаток
16 бит
в регистре ax
Байт
регистр или ячейка памяти
Байт
в регистре al
Байт 
в регистре ah
32 бит
dx — старшая часть
ax — младшая часть 
Слово 16 бит
регистр или ячейка памяти
Слово 16 бит в 
регистре ax
Слово 16 бит в
регистре dx
64 бит
edx — старшая часть
eax — младшая часть
Двойное слово 32 бит
регистр или ячейка памяти
Двойное слово
32 бит в 
регистре eax
Двойное слово
32 бит в
регистре edx

После выполнения команды деления содержимое флагов неопределенно, но возможно возникновение прерывания с номером 0, называемого “деление на ноль”. Этот вид прерывания относится к так называемым исключениям. Эта разновидность прерываний возникает внутри микропроцессора из-за некоторых аномалий во время вычислительного процесса. Прерывание 0, “деление на ноль”, при выполнении команды div может возникнуть по одной из следующих причин:

    делитель равен нулю;

    частное не входит в отведенную под него разрядную сетку, что может случиться в следующих случаях:

при делении делимого величиной в слово на делитель величиной в байт, причем значение делимого в более чем 256 раз больше значения делителя;

при делении делимого величиной в двойное слово на делитель величиной в слово, причем значение делимого в более чем 65 536 раз больше значения делителя;

при делении делимого величиной в учетверенное слово на делитель величиной в двойное слово, причем значение делимого в более чем 4 294 967 296 раз больше значения делителя.

К примеру, выполним деление значения в области del на значение в области delt (листинг 6).

 Листинг 6. Деление чисел <1> ;prg_8.6.asm <2> masm <3> model small <4> stack 256 <5> .data <6> del_b label byte <7> deldw 29876 <8> delt db 45 <9> .code ;сегмент кода <10> main: ;точка входа в программу <11> ... <12> xor ax,ax <13> ;последующие две команды можно заменить одной mov  ax,del <14> mov ah,del_b ;старший байт делимого в ah <15> mov al,del_b+1 ;младший байт делимого в al <16> div delt ;в al — частное, в ah — остаток <17> ... <18> endmain ;конец программы



Содержание раздела