汇编语言 - MASM32 - 乘以 [英] Assembly language - masm32 - multiplying
问题描述
我乘3号其中工程不错,即使随身携带。我想补充一个数字4只繁衍的学习目的。
I am multiplying 3 numbers which works good even with a carry. I want to add a 4th number to multiply just for learning purposes.
在我乘3号我转移到EDX和打印。伟大工程。
之后,我加入第四号我想我是32位乘以32位点¯x?所以,它存储到EDX:EAX
After i multiply 3 numbers i shift into EDX and print. Works great. After i add a 4th number i think i am multiplying 32bit x 32bit? So it stores into EDX:EAX?
我会再需要EAX转移到EDX所以他们一起打印?
林不知道,如果我这样做是正确第四届多少?
Would i then need to shift EAX into EDX so they are together to print? Im not sure if i am doing it right for the 4th number?
.data?
num1 dd ?
num2 dd ?
num3 dd ?
num4 dd ?
.data
sum dd 0
prod dd 0
prod2 dd 0
这里的提示
mov EAX, sval(input("Enter first number: "))
mov num1, EAX
mov EAX, sval(input("Enter second number: "))
mov num2, EAX
mov EAX, sval(input("Enter third number: "))
mov num3, EAX
mov EAX, sval(input("Enter fourth number: "))
mov num4, EAX
这里是逻辑
mov EAX, num1
mov EBX, num2
mul BL ; 8 bit x 8 bit ----> AX / 16bit
mov EBX, num3
mul BX ; 16bit x 16bit --->DX:AX
shl EDX, 16 ; shift low to high ;high / low in EDX
mov DX, AX ; mov in all reg
mov ECX, num4 ; 32bit x 32bit ---> EDX:EAX
mul CX
mov prod2, EAX ; for printing
我不知道我是否应该将num4到ECX和CX乘以
我应该用32位被乘以呢?我究竟做错了第四届多少?
谢谢
I am not sure if i should move num4 into ECX and multiplying by CX Should i be multiplying by 32bit instead? What am i doing wrong for the 4th number? Thank you
推荐答案
32位乘法使用 EAX
注册。您code第三乘法是因为你的 MUL
操作数16位使用16位寄存器,所以乘法是 AX点¯xCX
。 32位乘法需要32位操作数,所以在你的code,你需要使用 ECX
,而不是 CX
。此外,对于32位乘法preparation是不完整的,因为该值仍放在 EDX
寄存器。
32-bit multiplication uses EAX
register. Your code for the third multiplication is 16-bit since your MUL
operand uses 16-bit register, so the multiplication is AX x CX
. 32-bit multiplication needs 32-bit operand, so in your code, you need to use ECX
rather than CX
. Also, the preparation for 32-bit multiplication is incomplete, since the value is still placed in EDX
register.
所以,code应该是这样的:
So the code should be like this:
mov EAX, num1
mov EBX, num2
mul BL ; 8 bit x 8 bit ---> AX / 16bit
mov EBX, num3
mul BX ; 16bit x 16bit ---> DX:AX
shl EDX, 16 ; shift low to high ;high / low in EDX
mov DX, AX ; mov in all reg
mov EAX, EDX ; prepare EAX for 32bit x32bit
mov ECX, num4
mul ECX ; 32bit x 32bit ---> EAX x ECX ---> EDX:EAX
mov prod2, EAX ; for printing
请注意,32位乘法可能导致 64位值EDX:EAX
,所以一定要确保 EDX
寄存器由您的打印的功能考虑在内。
Be aware that 32-bit multiplication might result a 64-bit value in EDX:EAX
, so make sure the EDX
register is taken into account by your printing function.
这篇关于汇编语言 - MASM32 - 乘以的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!