.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
。
区别在于目标寄存器的大小。