Деление чисел без знака
Для деления чисел без знака предназначена команда
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 ;конец программыДеление чисел со знаком
Для деления чисел со знаком предназначена команда