2014-11-25 2 views
0

Пожалуйста, объясните мне, почему я получаю "Деление на ноль" ошибка для этого кода:Сборка ошибка деление

"мов ах, 300

мов бл, 2

IDIV бл"

Он должен быть следующим: al = ax div source, ah = ax mod source

ответ

2

idiv Подписано подразделение, которое производит коэффициент в al, как вы сказали. Это 8-битный регистр и 300/2=150, который не вписывается в 8 бит при использовании подписанной арифметики (так как максимум равен 127). В некоторой степени вводящий в заблуждение, вы получаете divide by zero для переполнения (это на самом деле называется #DE divide error). Это, конечно, написано в справочной системе.

Вы можете использовать div bl, если вы довольны неподписанным расчетом, в этом случае 150 вписывается в al, и вы не получите ошибку.