assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcom to masm!',0
datasg ends
stack segment
dw 10 dup (0)
stack ends
codesg segment
start: mov dh,23
mov dl,48
mov cl,2
mov ax,datasg
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push ax
push bx
push cx
push si
push di
mov ax,0b800h
mov es,ax
mov bl,cl ;存放字体颜色
mov al,160
dec dh
mul dh ;乘法结果为ax
mov dh,0
add dl,dl
add ax,dx ;ax 为行+列位置
mov di,ax ;显示屏位置
mov ah,bl ;设置字体颜色al
change: mov ch,0
mov cl,[si]
jcxz ok ;遇到0结束
mov al,ds:[si]
mov es:[di],ax
inc si
add di,2
jmp short change
ok: pop di
pop si
pop cx
pop bx
pop ax
ret
codesg ends
end start |