; exnl3.asm example declare variables, arrays, matrix extern printf section .data ; Data section, initialized variables msg: db "nasm exnl3.asm running", 0 ; C string needs 0 msg2: db "exnl3.asm finished", 0 fmt: db "%s", 10, 0 i1: db 1 ; byte, 8 bit, integer 1 i2: dw 2 ; word, 16 bit, integer 2 j3: dd 3, 3.5 ; double word, 32 bit, integer 3, float 3.5 f4: dq 1.1, 1.2, 2.1, 2.2 ; quad word, 64 bit, double 1.1, 1.2, 2.1, 2.2 i3: dq 1, 2, 3 ; quad word, 64 bit, long integers 1, 2, 3 ; quad word is 8 bytes (for indexing address) section .rodata ; read only data, protected one: dq 1.0 ; can not be changed section .bss ; block starting symbol for arrays s1: resb 80 ; 80 characters, bytes, allocated b2: resw 2 ; 2 words allocated c5: resd 5 ; 5 double words allocated a1: resq 3 ; 3 quad words allocated m1: resq 4 ; 4 quad words, could be 2 by 2 integer matrix ; increment byte address by 4 for each integer dmat: resq 8 ; could be 2 by 2 matrix of double ; increment byte address by 8 for each double section .text ; Code section. global main ; main program required name "main" main: push rbp ; set up stack frame, must be aligned mov rdi,fmt ; address of format, required register rdi mov rsi,msg ; address of data mov rax,0 ; or can be xor rax,rax call printf ; Call C function mov rdi,fmt ; finished print statement mov rsi,msg2 mov rax,0 call printf pop rbp ; restore stack mov rax,0 ; normal, no error, return value ret ; return