Проверка переполнения при делении

Рейтинг: 0Ответов: 1Опубликовано: 26.03.2015

Подскажите, как в программе сделать проверку переполнения регистра?

Код ASM:

mov   ax,4000H  ;делимое
mov   bl,2      ;делитель - байт, поэтому частное - тоже байт (AL)
div   bl        ;4000H/2 = 2000H, что не умещается в байте AL
                ;поэтому выполняется прерывание INT 00H

И заодно проверку деления на ноль )

mov   bx,0
div   bx 

Ответы

▲ 1

Делите числа одинаковой размерности (например, al - делимое, bl - делитель, ah - 0 или ax - делимое, bx - делитель, dx - 0), тогда переполнения не будет. Я бы не стал из-за такой мелочи связываться с переопределением обработчика прерывания.

Ну а если вам нужно делить именно на 2 (или на степень 2), то замените деление на двоичный сдвиг (shr).

В вашем случае перед делением нужно проверить, чтобы ah было строго меньше, чем bl, тогда частное должно уместиться в al.

Аналогично, при делении dx:ax на bx: dx должно быть меньше bx.