ХАНДЫФАР

Беззнаковое деление


_DIV reg/mem8 - Беззнаковое деление с сохранением результата в AL = Частное, AH = Остаток.

_DIV reg/mem16 - Беззнаковое деление DX:AX с сохранением результата в AX = Частное, DX = Остаток.


Делит значение без знака в регистрах ax, dx:ax (делимое) на исходный операнд (делитель) и сохраняет результат в регистрах ax (ah:al), dx:ax. Исходным операндом может быть регистр общего назначения или ячейка памяти. Действие этой инструкции зависит от размера операнда (делимое/делитель).


Нецелочисленные результаты усекаются до 0. Остаток всегда меньше делителя по величине. Переполнение обозначается исключением #DE (ошибка деления), а не флагом CF.


Флаги CF, OF, SF, ZF, AF и PF не определены.


Предположим, что регистр al содержит 7310, (004916), регистр bl содержит 410 (000416). Затем мы выполняем знаковое расширение последнего бита в регистре al до ah После выполнения div bl регистр al будет содержать 1810, (001216), регистр ah будет содержать остаток от деления 110 (000116).


  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. code segment public _______; Начало сегмента кода
  5. ____assume cs:code
  6. ____main proc _____________; Начало процедуры main
  7. ________mov_____al, 73_____; Копируем значение 73 в регистр al
  8. ________mov_____bl, 4______; Копируем значение 4 в регистр bl
  9. ________cbw________________; Выполняем знаковое расширение регистра al
  10. ________div_____bl_________; Выполняем беззнаковое деление al на bl
  11. ________mov_____ax, 4C00h__; Копируем значение функции завершения процесса в ah а значение в al
  12. ________int_____21h _______; Вызываем прерывание DOS
  13. ____main endp _____________; Конец процедуры main
  14. code ends _________________; Конец сегмента кода
  15. end main __________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda