Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка Division by Zero

4.9K
25 апреля 2007 года
efferson
57 / / 08.12.2005
Есть следующий код
Код:
masm
.model tiny
.stack 100h
.code

main:

    mov ax, 19h
    mov dx, 18h

    div dx  
                                               
;Выход из программы
    mov ax, 4c00h
    int 21h

end main


При попытке деления td говорит об исключении Division by Zero. Возможно я в этой жизни чего-то не понимаю, но по крайней мере отличить 24 от 0 я всё таки в состоянии... Или дело не в этом?
349
26 апреля 2007 года
Phantom-84
656 / / 27.10.2005
Судя по всему, исключение происходит из-за переполнения...
4.9K
26 апреля 2007 года
efferson
57 / / 08.12.2005
Простите, о каком переполнении идёт речь?
4.9K
26 апреля 2007 года
efferson
57 / / 08.12.2005
}{мм... Проблема решилась следующим образом
 
Код:
mov ax, 19h
mov cx, 18h
xor dx, dx

div сx


Может кто-нибудь объяснить, как содержимое регистра dx влияет на команду div? В спецификации сказано, что при исполнении div source (в случае разрядности моих аргументов) ax / source - причём результат помещается в ax, а остаток в dx. Т.е. dx используется на выходе команды, а не на входе...
622
26 апреля 2007 года
nilbog
507 / / 19.12.2006
ну так в первом случае вы делили (ax,dx)/dx
а сейчас ax/cx (dx=0 - старшие разряды)
349
26 апреля 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
Простите, о каком переполнении идёт речь?

В инструкции div reg16 делимое число выбирается из регистровой пары ax:dx, т.е. в твоем первом примере делимым является число 180019h, которое при делении на 18h даст частное, неумещающееся в 16-ти разрядах (регистр ax), т.е. при выполнении операции с использованием указанных исходных данных произойдет переполнение.

334
27 апреля 2007 года
HexEdit
809 / / 27.07.2006
efferson, тогда так:
 
Код:
mov ax, 19h
mov dl, 18h
div dl

При делении на байт, содержимое берется только из AX, тоесть будет 16 разрядов и переполнения не будет
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог