; multi-segment executable file template.
data segment
; add your data here!
pkey db "$"
NUM_BOXES EQU 3
BOX_WIDTH EQU 6
BOX_HEIGHT EQU 2
CHAR EQU '*'
CR_LF db 10, 13, '$'
CR EQU 13
LF EQU 10
ends
stack segment
dw 128 dup('#')
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
;
;;
; mov cx, NUM_BOXES
;next_box:
; push cx
; mov cx, BOX_HEIGHT
;next_row:
; mov cx, BOX_WIDTH
;next_column:
; mov ah, 2
; mov dl, CHAR
; int 21h
; loop next_column
; mov dl, CR
; mov dl, LF
; pop cx
; loop next_row
; loop next_box
push BOX_WIDTH
push BOX_HEIGHT
push NUM_BOXES
call print_row
call print_boxes
lea dx, pkey
mov ah, 9
int 21h ; output string at ds:dx
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
HOW_MANY_BOXES EQU bp+4
HEIGHT EQU bp+6
proc print_boxes
push bp
mov bp, sp
push cx
mov cx, [HOW_MANY_BOXES] ;NUM_BOXES
nxt_box:
push [HEIGHT]
call print_box
loop nxt_box
pop cx
pop bp
ret 2
endp print_boxes
how_many_rows EQU bp+4
proc print_box
mov cx, [how_many_rows] ; BOX_HEIGHT
nxt_row:
loop nxt_row
mov dl, CR
mov dl, LF
endp print_box
how_many_stars EQU bp+4
proc print_row
mov cx, [how_many_stars]
mov ah, 2
mov dl, CHAR
next_char:
loop next_char
endp print_row
end start ; set entry point and stop the assembler.