cpu 8086 bits 16 org 100h section .text mov ah,2 ; Tell MS-DOS to print characters xor si,si ; Clear first index register (holds _i_) outer: mov di,As ; Put array-of-arrays in second index register mov cx,Aslen ; Put length in counter register inner: mov bx,[di] ; Load array pointer into BX (address) register mov dl,[bx+si] ; Get SI'th element from array int 21h ; Print character inc di ; Go to next array (pointers are 2 bytes wide) inc di loop inner ; For each array mov dl,13 ; Print newline int 21h mov dl,10 int 21h inc si ; Increment index register cmp si,Alen ; If it is still lower than the array length jb outer ; Print the next items ret section .data ;;; Arrays A1: db 'a','b','c' A2: db 'A','B','C' A3: db '1','2','3' Alen: equ $-A3 ; Length of arrays (elements are bytes) ;;; Array of arrays As: dw A1,A2,A3 Aslen: equ ($-As)/2 ; Length of array of arrays (in words)