Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/20: Рейтинг темы: голосов - 20, средняя оценка - 4.70
1 / 1 / 1
Регистрация: 15.05.2013
Сообщений: 28
1

Какие проверки (кроме проверки неравенства делителя нулю) нужно выполнять перед делением

12.06.2013, 23:21. Показов 4163. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Подскажите, какие проверки (кроме проверки неравенства делителя нулю) нужно выполнять перед операций div, чтобы избежать ошибок, аварийных ситуаций?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2013, 23:21
Ответы с готовыми решениями:

Какие еще есть способы проверки строк на соответствие шаблонам, кроме регулярок?
Помимо регулярных выражений, какие еще есть способы проверки строк на соответствие шаблонам? Как,...

Программа проверки неравенства
Ребят, есть такая задачка. Требуется написать программу проверки, является ли x - решением...

PIC16C63A (Протеус). Флаг проверки на равенство нулю
Здравствуйте! Пишу программу для кодового замка, столкнулся с проблемой следующей части кода: ...

Создать скрипты для обновления системы, проверки её на вирусы, дефрагментации диска и проверки его на ошибки
Требуется создать батники, которые бы осуществляли запуск 1)обновления системы 2)проверку на...

1
Ушел с форума
Автор FAQ
16281 / 7605 / 1066
Регистрация: 11.11.2010
Сообщений: 13,618
13.06.2013, 09:46 2
Yalini,
если частное слишком велико для его размещения в регистре EAX/AX/AL.
Assembler
1
2
3
4
5
MOV AX,1046 ;делимое
MOV BH,2 ;делитель
IDIV BH ;частное в AL=523, это больше 255
;поэтому возникнет ошибка «деление на 0» или «переполнение»
;и компьютер прекратит выполнение программы
Поскольку разрядность делимого в два раза больше возможной разрядности частного, то возникает ряд ситуаций, когда процессор вместо деления генерирует исключения по переполнению. В операциях деления предполагается, что частное значительно меньше, чем делимое. Деление на 1, например, может также вызвать переполнение, так как частное равно делителю, поэтому рекомендуется следующее правило: если делитель – байт, то его значение должно быть меньше чем старший байт делителя (содержимое регистра ah); если делитель – двойное слово, то его значение должно быть меньше чем старшее двойное слово делителя (содержимое регистра edx).
Например:
Операция деления Делимое Делитель Частное
слово на байт 0123h 01h (01)23h
двойное слово на слово 0001 4026h 0001h (0001)4026h
В обоих случаях частное превышает возможный размер. Для того чтобы избежать подобных ситуаций, полезно вставлять перед командами DIV и IDIV соответствующую проверку. В случае деления слова на байт предположим, что DIVBYTE – однобайтовый делитель, а делимое находится уже в регистре AX. В случае деления двойного слова на слово предположим, что DIVWORD – двухбайтовый делитель, а делимое находится в регистровой паре DX:AX.
слово на байт двойное слово на слово
CMP AH,DIVBYTE CMP DX,DIVWORD
JNB переполнение JNB переполнение
DIV DIVBYTE DIV DIVWORD
Для примера выполним деление на ecx/cx/cl. Запись делимого в виде edx:eax означает 64-битное число X=edx*232+eax, поэтому, если edx < ecx, то после деления мы получим число Y=0*232+Z, где Z < 232, то есть умещается в eax. Если же edx = ecx, то в итоге получится число Y=1*232+Z, то есть число больше чем 232 – возникнет ошибка переполнения. Аналогично для dx:ax значение dx должно быть меньше cx, а для ah:al значение ah должно быть меньше cl – тогда ошибок не будет. Хотя об этом явно не предупреждают и существуют кодировки div/idiv edx/dx/ah – выполнение таких операций при любом содержимом регистра edx/dx/ah будет приводить к ошибке, аналогичной делению на 0.
Для команды IDIV данная логика должна учитывать тот факт, что либо делимое, либо делитель могут быть отрицательными, а так как сравниваются абсолютные значения, то необходимо использовать команду NEG для временного перевода отрицательного значения в положительное.
2
13.06.2013, 09:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2013, 09:46
Помогаю со студенческими работами здесь

Схема проверки сайта перед покупкой
Всем привет.Вот возникло желание купить более или менее сайтик. Но как это правильно сделать? Как...

Кто подскажет сервис проверки работы сайта в интернете (кроме denwer)
Кто подскажет сервис проверки работы сайта в интернете (кроме denwer)! Необходим именно бесплатный...

Существует ли универсальный метод проверки/перехвата POST сообщений перед отправкой?
Т.е. - можно ли средствами JS прочитать данные, которые отправляются на сервер программно (без...

Какие значения будут использоваться для проверки расчета
Интернет магазин продает мониторы, цена за один монитор изменяется динамически и зависит от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru