Разница между командами mul и imul в ассемблере заключается в том, что первая работает с беззнаковыми числами, а вторая — со знаковыми. metanit.com github.com
Команда mul (Multiply) обрабатывает беззнаковые данные. hackware.ru Первый множитель по умолчанию хранится в регистре AL или AX, а второй множитель передаётся команде как единственный операнд, который может храниться в регистре или в памяти. asmbase.ru
Команда imul (Integer Multiply) предназначена для умножения чисел со знаком. hackware.ru Инструкция имеет три формы, которые различаются числом операндов: asmbase.ru
- Вызов с одним операндом. asmbase.ru Аналогично команде mul, передаваемым операндом может быть регистр или значение в памяти. asmbase.ru
- Вызов с двумя операндами. asmbase.ru Перезаписываемый операнд назначения (первый множитель) умножается на передаваемый операнд — источник (второй множитель). asmbase.ru В качестве перезаписываемого операнда должен указываться регистр общего назначения, а вторым операндом может быть непосредственное значение, регистр общего назначения или область памяти. asmbase.ru
- Вызов с тремя операндами. asmbase.ru Используется операнд назначения и два операнда-источника, содержащие первый и второй множители. asmbase.ru Первый множитель, которым может быть регистр общего назначения или область памяти, умножается на второй множитель (непосредственное значение). asmbase.ru Итоговое произведение операндов (дважды от размера первого операнда — источника) усекается и хранится в операнде назначения (регистр общего назначения). asmbase.ru