ХАНДЫФАР

Знаковое деление


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

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


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


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


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


Предположим, что регистр ax содержит 610, (000616), регистр bx содержит 210, (000216). После выполнения cwd регистр dx будет содержать 0. После выполнения idiv bx регистр ax будет содержать 310, (000316) а регистр dx будет равен 0.


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