2017-05-09 49 views
-3

我們如何編寫一個代碼來僅使用shift和add來乘兩個32位整數。我知道如何用16位整數來實現,但我們怎樣才能完成32位整數,我們需要兩個寄存器來保存上半部分和下半部分?x86程序集添加和移位

+0

如果您指定更多詳細信息,這將是很好的。無論你是在MIPS,x86,i386還是arm。你是否可以解決問題。 – Taeyun

回答

0

假設您使用的是i386或更高版本,只需使用eax,ebx,ecx,edx而不是ax,bx,cx,dx寄存器。 即使您處於實模式(16位),也可以使用eax。

如果你想要一些代碼,在這裏。 它使用其他指令,如mov,和羅太難。 (我沒有測試它。)

乘EAX,EBX並保存32位的結果EDX:

mov ecx, 32 
xor edx, edx 
next_binary_digit: 
shl edx, 1 
rol ebx, 1 
text ebx, 1 
jz add_done 
add edx, eax 
add_done: 
loop next_binary_digit 

如果你要使用的內存,它會更復雜,因爲你可能需要加載值進入寄存器和移位,檢查進位,保存回內存。

或..你想堅持寄存器大小X還想要乘以大於X的整數嗎?