我有这个让我难以置信的令人难以置信的项目。我需要编写一个程序来从输入中获取2个数字,将它们相加或相乘。这个程序应该能够得到双重的单词。如何在汇编语言中添加和相乘双字
我知道如何从输入中获取数字,如果它们的大小在最大一个单词时如何添加或相乘,但我无法解决这个双字的问题。
有没有人有代码?
由于事先.....
我有这个让我难以置信的令人难以置信的项目。我需要编写一个程序来从输入中获取2个数字,将它们相加或相乘。这个程序应该能够得到双重的单词。如何在汇编语言中添加和相乘双字
我知道如何从输入中获取数字,如果它们的大小在最大一个单词时如何添加或相乘,但我无法解决这个双字的问题。
有没有人有代码?
由于事先.....
我要去假设分配的目标是让你用数字加倍工作寄存器的大小,如32位数字16位模式或32位模式下的64位数字。乘法可以类似于长手乘法来完成。我假设你可以使用一个乘法指令,其乘积是乘数或乘数的两倍。此示例显示数字“字”之间的空格:
aaaa bbbb ;multiplicand
x cccc dddd ;multiplier
---------------------
eeee eeee ;bbbb x dddd
ffff ffff ;aaaa x dddd
gggg gggg ;bbbb x cccc
+ hhhh hhhh ;aaaa x cccc
---------------------
pppp pppp pppp pppp ;product
在86:
MOV EBX,OP1
MOV EAX,OP2
IMUL EBX
结果是在EDX:EAX(32个寄存器) 高阶32位被存储在EDX寄存器和EAX寄存器中存储了低位32位。
此链接应帮助,如果你需要更多的解释: https://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm
扩展乘法是用于在32位x86上创建64位* 64位乘法的构建块,但您需要其中3个才能获得64位结果。 (其中4人获得完整的128b结果)。我认为OP在询问如何使用两倍于寄存器的操作数,而不仅仅是如何在x86中增加一个DWORD。 –
是否允许使用EAX之类的32位寄存器?你允许使用像RAX这样的64位寄存器吗? –
加上随身携带。去谷歌上查询。在搜索中包含目标体系结构,以便为您感兴趣的任何计算机获得结果。 –