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

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

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. Деление чисел

<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> end main ;конец программы

Деление чисел со знаком

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