汇编语言 - MASM32 - 乘以 [英] Assembly language - masm32 - multiplying

查看:278
本文介绍了汇编语言 - MASM32 - 乘以的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我乘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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆