option casemap:none printf proto :qword, :vararg exit proto :dword ROW_LEN equ (4*4) MEM_SIZE equ 4 .data ;; A 2d array - 2 rows, 4 columns ;; int twodimen[2][4] = { {0,1,2,3}, ;; {4,5,6,7}}; twodimen db 48 dup (0) tpl db "%d",13,10,0 .code main proc local cols:qword lea rbx, twodimen mov cols, 0 ;; Forgive me for the multiple loops, I'm just to lazy to ;; do the conditional jumps required for 2 for loops. -.- @1: mov rcx, cols mov dword ptr [rbx+0*ROW_LEN + rcx*MEM_SIZE], ecx ;; first row, rcx column inc cols cmp cols, 3 jle @1 mov cols, 0 mov rdx, 4 @2: mov rcx, cols mov dword ptr [rbx+1*ROW_LEN + rcx*MEM_SIZE], edx ;; second row, rcx column inc cols inc edx cmp cols, 3 jle @2 invoke printf, CSTR("--> Printing columns in row 1",10) mov cols, 0 @3: mov rcx, cols mov esi, dword ptr [rbx+0*ROW_LEN + rcx*MEM_SIZE] lea rdi, tpl call printf inc cols cmp cols, 3 jle @3 invoke printf, CSTR("--> Printing columns in row 2",10) mov cols, 0 @4: mov rcx, cols mov esi, dword ptr [rbx+1*ROW_LEN + rcx*MEM_SIZE] lea rdi, tpl call printf inc cols cmp cols, 3 jle @4 mov rax, 0 xor edi, edi call exit leave ret main endp