x86 在给定 AH 和 AL 的情况下计算 AX?
x86 Calculating AX given AH and AL?
我无法理解 x86 汇编中的寄存器,我知道 EAX 是完整的 32 位,AX 是低 16 位,然后是 AH 和 AL 是 AX 的高低 8 位,但我'我在做题。
如果 AL=10 且 AH=10,AX 中的值是多少?
我的想法是将10转换为二进制(1010)然后将其作为AX的高位和低位(0000 1010 0000 1010)然后将其转换为十进制(2570)我是否接近正确答案在这里,还是离题太远?
正如 Peter Cordes 所建议的,我会将数据想象为十六进制值:
RR RR RR RR EE EE HH LL
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...其中 RAX
是存在于 x86-64
.
中的 64 位寄存器
所以如果你有 AH = 0x12
和 AL = 0x34
,像这样:
00 00 00 00 00 00 12 34
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...然后你有 AX = 0x1234
和 EAX = 0x00001234
等等
请注意,如图所示,AH
是此处唯一未与低位对齐的“怪异”寄存器。其他(AL
、AX
、EAX
、RAX
(对于 64 位)只是大小不同,但都右对齐。 (例如,图表中标记为 EE EE
的两个字节本身没有寄存器名称。)
将 AL、AH 或 AX 合并到完整的 RAX 中,由于历史原因保留其他字节未修改。 (如果您不特别想要此合并,请选择 movzx eax, byte [mem]
或 movzx eax, word [mem]
加载:)
将 EAX 零扩展写入 RAX。 (Why do x86-64 instructions on 32-bit registers zero the upper part of the full 64-bit register?)
我无法理解 x86 汇编中的寄存器,我知道 EAX 是完整的 32 位,AX 是低 16 位,然后是 AH 和 AL 是 AX 的高低 8 位,但我'我在做题。
如果 AL=10 且 AH=10,AX 中的值是多少?
我的想法是将10转换为二进制(1010)然后将其作为AX的高位和低位(0000 1010 0000 1010)然后将其转换为十进制(2570)我是否接近正确答案在这里,还是离题太远?
正如 Peter Cordes 所建议的,我会将数据想象为十六进制值:
RR RR RR RR EE EE HH LL
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...其中 RAX
是存在于 x86-64
.
所以如果你有 AH = 0x12
和 AL = 0x34
,像这样:
00 00 00 00 00 00 12 34
| | || ||
| | || AL
| | AH |
| | |___|
| | AX |
| |_________|
| EAX |
|_____________________|
RAX
...然后你有 AX = 0x1234
和 EAX = 0x00001234
等等
请注意,如图所示,AH
是此处唯一未与低位对齐的“怪异”寄存器。其他(AL
、AX
、EAX
、RAX
(对于 64 位)只是大小不同,但都右对齐。 (例如,图表中标记为 EE EE
的两个字节本身没有寄存器名称。)
将 AL、AH 或 AX 合并到完整的 RAX 中,由于历史原因保留其他字节未修改。 (如果您不特别想要此合并,请选择 movzx eax, byte [mem]
或 movzx eax, word [mem]
加载:
将 EAX 零扩展写入 RAX。 (Why do x86-64 instructions on 32-bit registers zero the upper part of the full 64-bit register?)