将在屏幕上打印字符串的功能分装为函数。便于今后使用。
;helloworld.asm
org 07c00h
;setup stack.setup stack at most top of 640K
start: mov ax, 0x0FC0
mov ss, ax
mov ax, 0x0400
mov sp, ax
mov bx, msg1
push bx
call dumpstr
pop bx
jmp $
dumpstr:
;backup used registor
push ax
push bx
push cx
push dx
push bp
;get parameter
mov bp, sp
add bp, 12
mov bx, [bp]
;calculator string length
xor cx, cx
strlop: mov ax, [bx]
cmp ax, 0x0
jz calend
inc cx
inc bx
jmp strlop
calend:
push cx
mov ah, 0x03
xor bh, bh
int 0x10
pop cx
mov bx, 0x0007
push bp
mov bp, [bp]
mov ax, 0x1301
int 0x10
pop bp
;restore registor
pop bp
pop dx
pop cx
pop bx
pop ax
ret
msg1: DB 13, 10
DB 'Hello World'
DB 13, 10, 13, 10
times 510-($-$$) db 0
dw 0aa55h