在显存显示字符串(调用子程序实现)
assume cs:codesg,ds:datasg
datasg segment
db 'I love China !',0
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov dl,12 ;要显示的行号
mov dh,20 ;要显示的列号
call show
mov ax,4c00h
int 21h
; 在显存显示字符串,将十进制的数转换成对应的ascii码进行显示。
show:
mov ax,0b800h
mov es,ax
;mov di,dl*160+dh*2 ; 将要显示的目的地传给di
; mov al,160
mov ax,160
mul dl
mov di,ax
mov ax,2
mul dh
add di,ax
mov si,0
mov ch,0
s1: mov al,ds:[si]
mov cl,al
jcxz over
mov ah,2
mov es:[di],ax
inc si
add di,2
jmp s1
over: ret
codesg ends
end start
note:
1.在show里面本来要用jmp 标号模拟loop,因为事先不知道要显示的字符串的长度。所以根据末尾的0来结束打印。