我使用的是32位x86。
问题是我无法将位移到左侧。
我想每次读取一个字节并将其放入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
首先mov al, dl
将整个字节从dl移动到al,而不仅仅是半字节
其次,你只是转移al
shl al,4
移位后,剩余的高位字节或eax仍然不受影响。所以你所做的只是按顺序将myStr中的数字移动到al的高半字节。这意味着在每一步之后al将是16,32,48 ...... 128,如果前3个字节eax为0之前,则为eax。最后,eax应该看起来像0xXXXXXX80