Другие языки программирования и технологии

Ассемблер. При выполнении серии умножений происходит переполнение EAX.

При выполнении серии умножений происходит переполнение EAX. Дальше он что-то записывает в EDX. Как сделать корректную программу, чтобы выполнялось бесчисленное количество умножений и решить проблему с переполнением в EAX ?
Ruslan Kurantov
Ruslan Kurantov
94
А что означает корректно? !
Как раз операция умножения задействет два регистра EAX и EDX. И это считается корректным!
ГК
Геннадий Капанадзе
79 586
Лучший ответ
Команда:
IMUL источник
IMUL приемник, источник
IMUL приемник, источник1, источник2
Назначение:
Умножение чисел со знаком
Процессор:
8086
80386
80186

Эта команда имеет три формы, различающиеся числом операндов:

IMUL источник: источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда) , и результат располагается в АХ, DX:AX или EDX:EAX соответственно.
IMUL приемник, источник: источник (число, регистр или переменная) умножается на приемник (регистр) , и результат заносится в приемник.
IMUL приемник, источник1,источник2: источник 1 (регистр или переменная) умножается на источник 2 (число) , и результат заносится в приемник (регистр) .
Во всех трех вариантах считается, что результат может занимать в два раза больше места, чем размер источника. В первом случае приемник автоматически оказывается достаточно большим, но во втором и третьем случаях могут произойти переполнение и потеря старших бит результата. Флаги OF и CF будут равны единице, если это произошло, и нулю, если результат умножения поместился целиком в приемник (во втором и третьем случаях) или в младшую половину приемника (в первом случае) .

Значения флагов SF, ZF, AF и PF после команды IMUL не определены.

Команда:
MUL источник
Назначение:
Умножение чисел без знака
Процессор:
8086

Выполняет умножение содержимого источника (регистр или переменная) и регистра AL, АХ, ЕАХ (в зависимости от размера источника) и помещает результат в АХ, DX:AX, EDX:EAX соответственно. Если старшая половина результата (АН, DX, EDX) содержит только нули (результат целиком поместился в младшую половину) , флаги CF и OF устанавливаются в 0, иначе — в 1. Значение остальных флагов (SF, ZF, AF и PF) не определено.

Похожие вопросы