Я использую MUL в сборке (MASM), чтобы умножить два целых числа.Как распечатать вывод продукта MUL?
В соответствии с инструкциями по установке MASM, продукт хранится в EDX: EAX, комбинация регистров EDX и EAX (если я правильно понимаю).
Итак, я попробую распечатать результат регистрации EDX, а затем регистр EAX, чтобы распечатать все число.
Но когда я получаю продукт, который предположительно превышает 32 бита (10 знаков после запятой), я получаю странный ответ.
Например, 100000 * 100000 = 21410065408
, что не так. Но для небольших умножений он работает.
Вот код сборки:
; MULTIPLY
mov eax, var1 ; var1 and var2 from user input
mul var2
mov productResultEDX, edx
mov productResultEAX, eax
; PRINT RESULT
; mov edx, OFFSET productMsg
call WriteString
mov eax, productResultEDX
call WriteDec ; prints out EAX register data
;mov eax, productResultEAX
;call WriteDec
Все переменные объявлены как 32 бит DWORDs
ли я приближается это неправильно?
Обратите внимание, что младший 32 битом 100000 * 100000 является десятичным значением 1410065408. верхним 32 бит десятичного значение 2. Это объясняет свой результат, хотя я не уверен, как вы бы исправить ваш код, чтобы показать правильный результат. – icktoofay
Хм, что вы подразумеваете под объяснением моего результата? – LazerSharks
Вы печатаете десятичное значение верхних 32 бит, 2. Затем вы печатаете десятичное значение нижних 32 бит, 1410065408. Разбейте их вместе. 21410065408, ваш результат. Вы не можете просто печатать их сразу за другим; вы получите бессмысленные результаты. – icktoofay