-3
我們如何編寫一個代碼來僅使用shift和add來乘兩個32位整數。我知道如何用16位整數來實現,但我們怎樣才能完成32位整數,我們需要兩個寄存器來保存上半部分和下半部分?x86程序集添加和移位
我們如何編寫一個代碼來僅使用shift和add來乘兩個32位整數。我知道如何用16位整數來實現,但我們怎樣才能完成32位整數,我們需要兩個寄存器來保存上半部分和下半部分?x86程序集添加和移位
假設您使用的是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的整數嗎?
如果您指定更多詳細信息,這將是很好的。無論你是在MIPS,x86,i386還是arm。你是否可以解決問題。 – Taeyun