从.short数组中的奇数偏移量开始,这些movw到AX和movb到AL的加载指令之间有什么区别


.global main
.data
arr: .short 1, 0xEA, 0x2, 0x3, 0b1010
.text
main:
lea (arr), %rbx
movb 3(%rbx),%al #1
movw arr+3, %ax #2

当我尝试这个代码时,al得到值0x0,而ax得到值0x200你能告诉我为什么吗?#1和#2之间有什么区别?

由于x86是一个小端架构,arr中的数据看起来像:

arr+0   +1   +2   +3   +4   +5   +6   +7   +8   +9
0x01 0x00 0xEA 0x00 0x02 0x00 0x03 0x00 0x0A 0x00

#1向CCD_ 6读取数据。al是一个单字节寄存器,因此+3处的0x00被加载,并且该值变为0x0

#2向CCD_ 11读取数据。ax是一个两字节寄存器,因此加载了0x00 0x02,值变为0x200

区别在于目标寄存器的大小。

最新更新