Деление
idiv bx => Error: Division by zero
(ax = 65535 [т.е. -1], bx = 1) В чём проблема? Почему не получается разделить -1 на 1? Команда idiv bx работает так: ax = ax div bx dx = ax mod bx Получается, что не совсем так? |
ManHack, а можно весь кусок кода?
Операция idiv документация Intel Все, нашел ошибку! При делении на BX(а BX - это слово) Операнд(т.е. делимое) должно быть двойным словом. Т.е. находится в DX:AX Тогда будет возможно деление в пределах -32,768 / +32,767 Что содержит DX до начала операции? Кусок из Питера Абеля Что за среда разработки? Фраза "деление на ноль" все же настораживает. Т.е. ИМХО сигнализируется неправильная ошибка. |
Код:
var Среда Turbo Assembler (ассемблер для Intel-совместимых, втроенный в Turbo Pascal 7.0) Т.е. всегда делится содержимое пары DX:AX на BX? Или в каких-то случаях делится только содержимое AX на BX? (в каких?) А каким образом вообще производится деление пары? Допустим, в AX у меня записано 12, а в DX записано 7, что тогда будет в BX? А что будет в BX, если в DX записано 65535, а в AX, допустим, 3? Мне просто интересно как формируется одно число из этой пары DX:AX. А ещё я видел, что некоторые пишут три регистра после idiv. Например, так: idiv eax, eax, ah У меня среда ругается, если я записываю больше одного слова. Как объясняется этот феномен? |
Среда разработки Lazarus. Все выполнилось не чихнув.
Давай смотреть входные данные. BTW, а проще конструкции задать нельзя? Больно много действий перед idiv, что усложняет подготовку тестов. Код:
program Project1; |
Моя программа призвана вычислять выражение (a - b*c)/(b - c), но достаточно разобраться как просто делить -1 на 1 (или что-то подобное), когда деление происходит пары чисел DX:AX?
И всё-таки, что насчёт конструкций вида " idiv eax, eax, ah "? Они вообще реальны? Как они работают и при каких условиях? Что-то толком про такой вариант использования idiv нигде не нашёл, ни у Юрова, ни у Абеля... |
Цитата:
И теперь такой вопрос: почему в наше время, когда на дворе уже вовсю разгуливает 64-битный код, народ так и норовит использовать 16-битные регистры без надлежащей необходимости? Код:
asm |
Необходимость исходит в виде требований свыше ничего кроме ax, bx, cx и dx не использовать ^^
Но за код спасибо. Теперь я знаю, что мне нужна команда cwd. |
Время: 17:25. |
Время: 17:25.
© OSzone.net 2001-