2016-12-15 139 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。 –