; 第十章 实验十 练习1
; 子程序描述
; 名称:show_str
; 功能:指定位置,用指定颜色,显示一个用0结束的字符串
; 参数:(dh) = 行号(0--24),(dl) = 列号(0--79)
; (cl) = 颜色,ds:si 指向字符串的首地址
; 返回:无
assume cs:code, ds:data
data segment
db 'Welcome to masm', 0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov dh, 8
mov dl, 3
mov cl, 2
mov si, 0
call show_str
mov ah, 01h ; 不是mov ax, 01h
int 21h
mov ax, 4c00h
int 21h
show_str:
push ax
push bx
push cx
push dx
push es
; 计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800 : Y
; 循环将参数里的字串写进显卡内存,并检测到0就返回
; bx = 160*(行数-1)
sub dh, 1
mov al, 160
mul dh
mov bx, ax ; bx 为根据行数算出来的偏移值
; ax = 列数*2-2
;mov bl, dl
mov al, 2
mul dl
sub ax, 2 ; 根据列数算出来的偏移值
add bx, ax ; 行数和列数的和存在bx中了
mov ax, 0b800h
mov es, ax
mov dl, cl ; 保存字体颜色属性
mov ch, 0
s_show_str:
mov cl, ds:[si]
mov es:[bx], cl
jcxz ok_show_str
mov es:[bx+1], dl
inc si
add bx, 2
jmp short s_show_str
ok_show_str:
pop es
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start