.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
when I try this code al
gets the value 0x0
however ax
gets the value 0x200
can you tell me why is that? what is the difference between #1 and #2 ?
CodePudding user response:
Since x86 is a little-endian architecture, the data in arr
looks like:
arr 0 1 2 3 4 5 6 7 8 9
0x01 0x00 0xEA 0x00 0x02 0x00 0x03 0x00 0x0A 0x00
#1 reads data to al
. al
is a one-byte register, so 0x00
at the 3
is loaded and the value becomes 0x0
.
#2 reads data to ax
. ax
is a two-byte register, so 0x00 0x02
is loaded and the value becomes 0x200
.
The difference is the size of the destination registers.