2015-09-27 39 views
-3

我想將寄存器bl乘以8並將結果存儲在bl中。然而,當我運行:將bl乘以8

mov bl,1 
mov al,8 
mul bl 

BL仍然等於1,沒有8.我依稀記得一些關於移動到BX或斧頭或東西的價值......可能有人伸出援助之手?謝謝!!

通緝行爲:

bl*=8 
+1

如有疑問,請參閱指令集參考。 'mul bl'在'ax'中產生結果。另外,乘以2的冪,你通常使用班次。所有你需要的是'shl bl,3'。 – Jester

+0

如果您單獨使用一個調試器來突出顯示在最後一條指令後哪些寄存器發生了更改,您將更容易捕獲像這樣的錯誤。請參閱http://stackoverflow.com/tags/x86/info –

回答

3

乘以8是最容易通過左移3次完成:

shl bl, 3 

要糾正你自己寫的代碼,你只需要添加一個mov

mov bl, 1 
mov al, 8 
mul bl  ;AL * BL --> AX 
mov bl, al 
+0

或者'imul ebx,ebx,8'(有符號乘法)ebx = ebx * 8.這是3操作數非破壞性形式:'imul r32 ,r/m32,imm8',也可以用'imm32'。不適用於8位操作數大小或無符號多路選擇器。 –