我有一个值为0x01ABCDEF(十六进制值)的寄存器ecx 我想访问BYTE 2(AB)以便对其执行操作。 我尝试过使用cl或ch但是那些没有访问正确的字节。 我试过了:
mov bh, [ecx+2]
但它只是错误... 谢谢您的时间和帮助!
答案 0 :(得分:2)
是的 - CL将为您提供EF
,CH会根据您上面给出的值给您CD
。既然你不想要那些,那么你必须做一个转换才能将字节放在正确的位置:
mov ebx, ecx
shr ebx, 8
现在BH将拥有AB
,BL将拥有CD
。
编辑:从您的评论中,您显然并不需要BH中的值 - 相反,您只想操纵该特定字节而不影响ECX的其余部分。在这种情况下,做这样的事情可能最容易:
ror ecx, 16
not cl // placeholder for the manipulation
rol ecx, 16
这只是旋转ECX所以我们关心的字节在CL中,然后操纵CL,然后旋转ECX,这样字节就是它们开始的地方。我应该补充一点,虽然这很简单,但在某些处理器上它会很慢。 Pentium IV没有桶形移位器,因此旋转需要的时间与移动的位数成比例。更糟糕的是,操纵CL然后使用ECX可以(在这种情况下可能会)导致Partial Register Stall。这对你来说是否重要取决于你要用这个来完成什么,以及它是否会被PRS期间可以执行的其他指令所包围。