assembly 程序集x86,mov $常量,%寄存器[重复]

uz75evzq  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

此问题在此处已有答案

How do AX, AH, AL map onto EAX?(7个答案)
6天前关闭
我有以下代码片段:

mov $0, %eax
mov $0x2023, %ax
mov $1, %ah

字符串
执行mov $0x2023, %ax时会发生什么?
我期望%eax=0x20231,但它是0x123。我使用了调试器,看到%ax是0x2023,但%ah变成了20,%al变成了23。为什么会发生这种情况?下面是我认为代码将如何运行。

mov $0, %eax # eax = (AX)0000000000000000  (AH)00000000  (AL)00000000
mov $0x2023, %ax # eax = (AX)0010 0000 0010 0011  (AH)00000000  (AL)00000000
mov $1, %ah # eax = (AX)0010 0000 0010 0011  (AH)00000001  (AL)00000000

apeeds0o

apeeds0o1#

EAX不是由AX、AH和AL组成的!
参见How do AX, AH, AL map onto EAX?

high end     low end
                     |            |
                     v            v 
                     <---  EAX --->
mov $0, %eax         00  00  00  00 

                             <-AX->
mov $0x2023, %ax     00  00  20  23

                             AH  AL
mov $1, %ah          00  00  01  23
                     <-??->

字符串
没有给从位16到位31的部分命名。
我通常称之为斧头。

相关问题