x86计算给定AH和AL的AX?

时间:2016-05-15 21:20:58

标签: assembly x86 cpu-registers

我在理解x86汇编中的寄存器时遇到问题,我知道EAX是全32位,AX是低16位,然后AH和AL是AX的高低8位,但是我&# 39;做一个问题。

如果AL = 10且AH = 10,AX中的值是什么?

我对此的想法是将10转换为二进制(1010),然后将其作为AX的高位和低位(0000 1010 0000 1010),然后将其转换为十进制(2570)am am I near the right to right在这里回答,还是走开?

1 个答案:

答案 0 :(得分:3)

正如Peter Cordes所建议的,我将数据想象为十六进制值:

RR RR RR RR EE EE HH LL
|           |     || ||
|           |     || AL
|           |     AH  |
|           |     |___|
|           |     AX  |
|           |_________|
|           EAX       |
|_____________________|
RAX

...其中RAXx86-64中存在的64位寄存器。

所以,如果您有AH = 0x12AL = 0x34,请执行以下操作:

00 00 00 00 00 00 12 34
|           |     || ||
|           |     || AL
|           |     AH  |
|           |     |___|
|           |     AX  |
|           |_________|
|           EAX       |
|_____________________|
RAX

...然后你有AX = 0x1234EAX = 0x00001234等。

请注意,如此图所示,AH是此处唯一的“奇怪”寄存器,它与低位不对齐。其他人(ALAXEAXRAX(64位)只是大小不同,但都在右侧对齐。 (例如,图表中标记为EE EE的两个字节本身没有寄存器名称。)