2016-12-15 138 views
-1

我有这个让我难以置信的令人难以置信的项目。我需要编写一个程序来从输入中获取2个数字,将它们相加或相乘。这个程序应该能够得到双重的单词。如何在汇编语言中添加和相乘双字

我知道如何从输入中获取数字,如果它们的大小在最大一个单词时如何添加或相乘,但我无法解决这个双字的问题。

有没有人有代码?

由于事先.....

+0

是否允许使用EAX之类的32位寄存器?你允许使用像RAX这样的64位寄存器吗? –

+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 
0

在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

+0

扩展乘法是用于在32位x86上创建64位* 64位乘法的构建块,但您需要其中3个才能获得64位结果。 (其中4人获得完整的128b结果)。我认为OP在询问如何使用两倍于寄存器的操作数,而不仅仅是如何在x86中增加一个DWORD。 –