в каких случаях после выполнения команды div прога ее вызвавшая будет прервана по ошибке ? команда mov ecx, ecx != 0
ледите за содержимом регистра DX или EDX. Оно болжно быть при выполнении команды DIV равнятся 0. Желаю успехов!
неправильный это подход. т.е. это 100% гарантия что переполнения не произойдёт, но если EDX не равно нулю это ещё не значит что переполнение будет.
неправильный это подход. т.е. это 100% гарантия что переполнения не произойдёт, но если EDX не равно нулю это ещё не значит что переполнение будет. от1212 Вы совершенно правы, но для случая деления на константу. Если делитель переменная и может приобретать произвольные значения, случайно, то гарантированно будет когда DX(EDX) равен 0. Дело в том, что DX/EDX является расширением аккумулятора АХ/ЕАХ и участвует в выполнении операции деления, являясь расширенным числителем. Так уж придумал Intel. Желаю успехов.
А вы о переименовании регистров ничего не слыхали? Внутренних регистров гораздо больше чем программных и в Pentium как минимум два! АЛУ т.е. два аккомулятора... Поскольку разрядность делимого в два раза больше возможной разрядности частного, то возникает ряд ситуаций, когда процессор вместо деления генерирует исключения по переполнению. Для того чтобы избежать подобных ситуаций, полезно вставлять перед командами DIV и IDIV соответствующую проверку. В случае деления слова на байт предположим, что DIVBYTE — однобайтовый делитель, а делимое находится уже в регистре AX. В случае деления учетверенного слова на двойное слово предположим, что DIVDWORD — четырехбайтовый делитель, а делимое находится в регистровой паре EDX:EAX. Код (Text): ;слово на байт CMP AH,DIVBYTE JNB переполнение DIV DIVBYTE . . . ;учетверенное слово на двойное cmp edx,DIVDWORD jnb переполнение DIV DIVDWORD
Читаем классиков: http://z0mbie.host.sk/idiv_r.txt IMHO, одна из подробнейших инструкций на манер работы DIV
Моя лепта в это дело. Переполнение возникнет в 2-х случаях: 1. делитель равен нулю 2. содержимое DX (EDX/AH) больше или равно содержимого делителя word (dword/byte) Баста. Других вариантов нет.