Top.Mail.Ru
Ответы
Аватар пользователя
12 лет назад
от
Изменено

Проблема знака при умножении/делении (ассемблер) , MUL, IMUL, DIV, IDIV

Вопрос: в чем заключается проблема знака при умножении и делении в ассемблере? И ее решение.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
12лет

В предыдущем ответе ссылка не рассматривает результат деления. Надо иметь в виду, что при делении может появиться остаток: он всегда имеет знак делимого. Располагается он в старшей части делимого, в то время как младшая часть содержит частное.

Старшая часть находится в AH или DX или EDX в зависимости от длины операндов (16, 32, 64 бит для делимого и 8, 15, 32 бит для делителя соответственно) . Младшая часть делимого содержит частное (AL, AX, EAX) для тех же случаев.

Код машинной команды определяется ассемблером на этапе трансляции, для разных длин операндов коды разные. Попробуй выполнить интересующие тебя команды в отладчике (дебаггере) какого-либо дизассемблера, которые обычно прилагаются к компиляторам языков высокого уровня (например Си и всех его модификаций) только не бери старые: только начиная с I486 или Р-III (для кратных операций умножения — в Р-III это 4 одновременных умножения).