1.显示字符串
编写一个通用的子程序,向调用者提供与显存无关的接口,方便调用者在窗口指定位置显示字符串的功能。
assume cs:code
data segment
db 'Welcome to masm!',0 ;要显示的字符串
data ends
code segment
start: mov dh,8 ;行号
mov dl,3 ;列号
mov cl,2 ;指定显示属性(颜色、闪烁等),此处为绿色显示
mov ax,data
mov ds,ax
mov si,0
call show_str ;调用子程序
mov ax,4c00h
int 21h
;子程序
show_str: mov ax,0b800h ;显存的段地址
mov es,ax
mov al,0a0h ;0a0h表示每行的字符数(每行80个字符,每个字符需占用2个字节,
;其中包含属性字节),用于计算用户指定行的起始地址
mul dh ;计算得到指定行偏移地址
mov di,ax
mov al,2 ;用于计算用户指定行的起始列位置
mul dl
add di,ax ;最后得到需要显示字符的具体偏移地址,并赋给di
put: push cx ;由于在子程序中需要使用cx寄存器,这里保存cx中的值(字体的属性)
mov cl,ds:[si] ;获得需要显示的字符
mov ch,0
jcxz ok ;若cx=0,则转到ok处,返回,即表示到达了字符串末尾
mov es:[di],cl
pop cx
mov es:1[di],cl
inc si
add di,2
jmp short put
ok: ret ;子程序返回
code en