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