代码如下:
assume ds:data,ss:stack,cs:code
data segment
db 'Welcome to masm!',0
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:
;设置栈段
mov ax,stack
mov ss,ax
mov sp,10h
;设置子函数参数值
mov dh,1
mov dl,0
mov cl,2
mov ax,data
mov ds,ax
mov si,0
;调用清屏函数
call clr_scr
;调用字符串显示函数
call show_str
;程序返回
mov ax,4c00h
int 21h
;---------------------------分割线-------------------------------
;<字符串显示>参数:
;(dh)=行号(0~24)
;(dl)=列号(0~79)
;(cl)=颜色
;ds:si指向字符串的首地址
show_str:
;数据保存
push ax
push es
push bp
push di
;设置显存段地址为es
mov ax,0B800h
mov es,ax
;设置显存偏移地址为[bp+di]
mov al,160
mul dh
mov bp,ax
mov al,2
mul dl
mov di,ax
;颜色属性
mov dl,cl
;子函数主体
s:
mov cl,[si]
mov ch,0
jcxz ok
mov al,[si]
mov es:[bp+di],al
mov es:[bp+di+1],dl
inc si
add di,2
jmp short s
;数据恢复,程序返回
ok:
pop di
pop bp
pop es
pop ax
ret
;---------------------------分割线-------------------------------
;清屏操作,无参数和返回值
clr_scr:
push cx
push si
push ax
mov cx,4000
mov si,0
mov ax,0B800h
mov es,ax
s1:
mov es:[si],0
inc si
loop s1
pop ax
pop si
pop cx
ret
code ends
end start
运行结果如下: