2013-10-30 79 views
0

我使用x86 32位。裝配移位操作?

問題是我不能將位移到左邊。

我想每次讀取一個字節並將其放入eax,但我搞亂了移位。我無法將這些位移入高位。任何想法?

myStr byte "12345678" 

mov ecx, offset myStr 

mov dl, myStr[ecx] 

sub dl,30h ;convert to real digit 

mov al, dl 

shl al,4 

inc ecx 

;eax should look like this end of the operation 12345678 
+1

嘗試'或al,dl'而不是'mov'。也許也想要轉移所有的'eax'。 –

+0

eax在技術上不會「看起來像」12345678。 – Gunner

回答

1

首先mov al, dl整個字節從DL轉移到人,不只是一個四位

其次,你只是轉移人

shl al,4 

移位後,剩餘的高字節或者eax仍然沒有受到影響。所以你所做的只是順序地將myStr中的數字移動到al的高位。這意味着在每個步驟之後,al將是16,32,48 ... 128,如果前3個字節eax是0,那麼eax也是。在結束eax應該看起來像0xXXXXXX80