masm
.model tiny
.stack 100h
.code
main:
mov ax, 19h
mov dx, 18h
div dx
;Выход из программы
mov ax, 4c00h
int 21h
end main
Ошибка Division by Zero
Код:
При попытке деления td говорит об исключении Division by Zero. Возможно я в этой жизни чего-то не понимаю, но по крайней мере отличить 24 от 0 я всё таки в состоянии... Или дело не в этом?
Судя по всему, исключение происходит из-за переполнения...
Простите, о каком переполнении идёт речь?
Код:
mov ax, 19h
mov cx, 18h
xor dx, dx
div сx
mov cx, 18h
xor dx, dx
div сx
Может кто-нибудь объяснить, как содержимое регистра dx влияет на команду div? В спецификации сказано, что при исполнении div source (в случае разрядности моих аргументов) ax / source - причём результат помещается в ax, а остаток в dx. Т.е. dx используется на выходе команды, а не на входе...
а сейчас ax/cx (dx=0 - старшие разряды)
Цитата:
Простите, о каком переполнении идёт речь?
В инструкции div reg16 делимое число выбирается из регистровой пары ax:dx, т.е. в твоем первом примере делимым является число 180019h, которое при делении на 18h даст частное, неумещающееся в 16-ти разрядах (регистр ax), т.е. при выполнении операции с использованием указанных исходных данных произойдет переполнение.
Код:
mov ax, 19h
mov dl, 18h
div dl
mov dl, 18h
div dl
При делении на байт, содержимое берется только из AX, тоесть будет 16 разрядов и переполнения не будет