【发布时间】:2013-02-17 22:16:56
【问题描述】:
我对 x86 寄存器的理解是说每个寄存器都可以被整个 32 位代码访问,并且分成多个可访问的寄存器。
在这个例子中EAX是一个32位寄存器,如果我们调用AX它应该返回前16位,如果我们调用AH或AL它应该返回16之后的下8位bits 和 AL 应该返回最后 8 位。
所以我的问题是,因为我并不真正相信这就是它的运作方式。如果我们存储 32 位值,也就是 EAX 存储:
0000 0100 0000 1000 0110 0000 0000 0111
所以如果我们访问AX 它应该返回
0000 0100 0000 1000
如果我们读到AH 它应该返回
0000 0100
当我们读到AL 它应该返回
0000 0111
这是正确的吗?如果是 AH 真正具有什么价值?
【问题讨论】:
-
不,您的 AX 值是错误的。破解最后 16 位。 AH 只返回 EAX 的第 8 位到第 15 位。
-
请将位模式替换为在您的问题上下文中更容易理解的内容,例如:0000 0001 0010 0011 ...
标签: assembly x86 cpu-registers