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
© Copyright 2025