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

what is the difference between these movw to AX and movb to AL load instructions, from an odd offset in .short array?

.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 是 little-endian 架构,arr 中的数据如下所示:

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

#1 读取数据到 alal 是一个 one-byte 寄存器,所以 +3 处的 0x00 被加载并且值变为 0x0.

#2 读取数据到 axax 是一个 two-byte 寄存器,所以 0x00 0x02 被加载并且值变成 0x200.

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