Data layout Practice big endian and little endian data layout Sample

NASM: data and bss
Examples and
Sample Problems
ICS312
Machine-Level and
Systems Programming
Henri Casanova ([email protected])
Data segment example
tmp
pixels
i
message
buffer
max
dd
db
dw
db
times
dd
-1
0FFh, 0FEh, 0FDh, 0FCh
0
“H”, “e”, “llo”, 0
8
db 0
254
28 bytes
tmp
(4)
pixels
(4)
i
(2)
message
(6)
buffer
(8)
max
(4)
Data segment example
tmp
pixels
i
message
buffer
max
dd
db
dw
db
times
dd
-1
0FFh, 0FEh, 0FDh, 0FCh
0
“H”, “e”, “llo”, 0
8
db 0
254
28 bytes
FF FF FF FF FF FE FD FC 00 00 48 65 6C 6C 6F 00 00 00 00 00 00 00 00 00 00 00 00 FE
tmp
(4)
pixels
(4)
i
(2)
message
(6)
buffer
(8)
max
(4)
Endianness?
max
dd
254
00 00 00 FE
max


In the previous slide we showed the above 4-byte memory
content for a double-word that contains 254 = 000000FEh
While this seems to make sense, it turns out that Intel
processors do not do this!



Yes, the last 4 bytes shown in the previous slide are wrong
The scheme shown above (i.e., bytes in memory follow the
“natural” order): Big Endian
Instead, Intel processors use Little Endian:
FE 00 00 00
max
Little Endian
mov eax, 0AABBCCDDh
mov [M1], eax
mov ebx, [M1]
Registers
eax
ebx
Memory
[M1]
Little Endian
mov eax, 0AABBCCDDh
mov [M1], eax
mov ebx, [M1]
Registers
eax
ebx
AA BB CC DD
Memory
[M1]
Little Endian
mov eax, 0AABBCCDDh
mov [M1], eax
mov ebx, [M1]
Registers
eax
ebx
AA BB CC DD
Memory
[M1]
DD CC BB AA
Little Endian
mov eax, 0AABBCCDDh
mov [M1], eax
mov ebx, [M1]
Registers
eax
AA BB CC DD
ebx
AA BB CC DD
Memory
[M1]
DD CC BB AA
Little Endian
mov eax, 0AABBCCDDh
mov [M1], eax
mov ebx, [M1]
Registers
eax
AA BB CC DD
ebx
AA BB CC DD
Memory
[M1]
DD CC BB AA
In-register byte order and in-memory byte order, within a
single multi-byte value, are different!
Example
pixels
x
blurb
buffer
min

times
dd
db
times
dw
4
db
0FDh
00010111001101100001010111010011b
“ad”, “b”, “h”, 0
10
db 14o
-19
What is the layout and the content of the data
memory segment on a Little Endian
machine?

Byte per byte, in hex
Example
pixels
x
blurb
buffer
min
times
dd
db
times
dw
4
db
0FDh
00010111001101100001010111010011b
“ad”, “b”, “h”, 0
10
db 14o
-19
25 bytes
FD FD FD FD D3 15 36 17 61 64 62 68 00 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C ED FF
pixels
(4)
x
(4)
blurb
(5)
buffer
(10)
min
(2)
Practice #1
var1
var2
a1
wt

dd
db
times
db
-9
“dcba”
3
dw
0A3h, 0
011b
What is the layout and the content of the data
memory segment on a Little Endian
machine?

Byte per byte, in hex
Practice #1
var1
var2
a1
wt
dd
db
times
db
-9
“dcba”
3
dw
0A3h, 0
011b
16 bytes
F7 FF FF FF 64 63 62 61 03 00 03 00 03 00 A3 00
var1
(4)
var2
(4)
a1
(6)
wt
(2)
Practice #2
x1
msg
array
wt

dw
db
times
dw
-22
“ba”, 0
2
dd
023o
0,011b,020o
What is the layout and the content of the data
memory segment on a BIG ENDIAN
machine?

Byte per byte, in hex
Practice #2
x1
msg
array
wt
dw
db
times
dw
-22
“ba”, 0
2
dd
023o
0,011b,020o
19 bytes
FF EA 62 61 00 00 00 00 13 00 00 00 13 00 00 00 03 00 10
x1
(2)
msg
(3)
array
(8)
wt
(6)
Example

Data segment:
L1
L2
L3

db
dw
db
0AAh, 0BBh
0CCDDh
0EEh, 0FFh
Program:
mov eax, [L2]
mov ax, [L3]
mov [L1], eax

What’s the memory content?
Solution

Data segment:
L1
L2
L3
db
dw
db
0AAh, 0BBh
0CCDDh
0EEh, 0FFh
L1
L2
L3
AA BB DD CC EE FF
Solution
L1
L2
L3
AA BB DD CC EE FF
mov eax, [L2]
; eax = FF EE CC DD
mov ax, [L3]
; eax = FF EE FF EE
mov [L1], eax
; L1 points to EE FF EE FF
L1
L2
L3
EE FF EE FF EE FF
Final memory content
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
What is the content of “data” memory after the code executes
on a Little Endian Machine?
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 A5 00 61 64 66
first
(4)
second
(2)
third
(3)
00 00 00 00
eax
00 00 00 00
ebx
Example
first
second
third
mov
inc
mov
mov
mov
db
dw
db
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 A5 00 61 64 66
first
(4)
second
(2)
third
(3)
Put an address into eax
(addresses are 32-bit)
xx xx xx xx
eax
00 00 00 00
ebx
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 A5 00 61 64 66
first
(4)
second
(2)
third
(3)
xx xx xx xx
eax
00 00 00 00
ebx
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 A5 00 61 64 66
first
(4)
second
(2)
third
(3)
xx xx xx xx
eax
A5 A4 12 4F
ebx
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 4F 12 A4 A5 66
first
(4)
second
(2)
third
(3)
xx xx xx xx
eax
A5 A4 12 4F
ebx
Example
first
second
third
db
dw
db
mov
inc
mov
mov
mov
00h, 04Fh, 012h, 0A4h
165
“adf”
eax, first
eax
ebx, [eax]
[second], ebx
byte [third], 11o
00 4F 12 A4 4F 12 09 A5 66
first
(4)
second
(2)
third
(3)
xx xx xx xx
eax
A5 A4 12 4F
ebx
Practice #3

Consider the following program
var1
var2
var3
dd
db
db
mov
add
mov
add
mov

179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
What is the layout of memory starting at address
var1 on a Little Endian Machine?
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
var1
(4)
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
var2
(3)
var3
(3)
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
B3 00 00 00 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
B3 00 00 00 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
xx xx xx xx eax
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
B3 00 00 00 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
xx xx xx xx eax
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
B3 00 00 00 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
xx xx xx xx eax
12 17 A3 00 ebx
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
B3 00 00 00 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
xx xx xx xx eax
12 17 A3 05 ebx
Practice #3
var1
var2
var3
dd
db
db
mov
add
mov
add
mov
179
0A3h, 017h, 012h
“bca”
eax, var1
eax, 3
ebx, [eax]
ebx, 5
[var1], ebx
05 A3 17 12 A3 17 12 62 63 61
var1
(4)
var2
(3)
var3
(3)
xx xx xx xx eax
12 17 A3 05 ebx
Practice #4

Consider the following program
var1
var2
var3
db
“b”,”ca”,0
db 1,2,3,4
times 2 dw
012h
mov
mov
sub
add
mov

eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
What is the layout of memory starting at address
var1 on a Little Endian Machine?
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
var1
(4)
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
var2
(4)
var3
(4)
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 00 03 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 00 03 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
xx xx xx xx eax
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 00 03 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
xx xx xx xx eax
xx xx xx xx ebx
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 00 03 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
xx xx xx xx eax
xx xx xx xx ebx
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 00 03 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
xx xx xx xx eax
xx xx xx xx ebx
Practice #4
var1
var2
var3
db
“b”,”ca”,0
times db 3,0,0,0
times 2 dw
012h
mov
mov
sub
add
mov
eax, var3
ebx, var1
eax, 4
ebx, [eax]
dword [ebx], 42
62 63 61 2A 00 00 00 00 12 00 12 00
var1
(4)
var2
(4)
var3
(4)
xx xx xx xx eax
xx xx xx xx ebx