2013-10-30 50 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