.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 ?
>Solution :
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.