1.显示字符串
问题:编写一个通用的子程序来实现该功能
子程序名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),(cl)=颜色,ds:si指向字符串的首地址
返回:无
应用举例:在屏幕的8行3列,用绿色显示data段中的字符串。
内存地址中有一80*25彩色字符模式显示缓冲区的结构,地址空间为:B8000H~BFFFFH,共32KB。向这个地址空间写入数据,写入的内容就会立即出现在显示器上。
80*25表示显示器可以显示25行,每行80个字符,每个字符可以有256中属性(背景色、前景色、闪烁、高亮等组合信息)。每个字符在显示缓冲区中占有两个字节,分别存放字符的ASCII码和属性。在
8*25模式下,一屏的内容在显示缓冲区中共占4000个字节。
1 assume cs:code, ds:data, ss:stack
2 data segment
3 db 'Welcome to masm!', 0
4 data ends
5
6 stack segment
7 db 16 dup (0)
8 stack ends
9
10 code segment
11 start : mov dh, 8
12 mov dl, 3
13 mov cl, 2
14 mov ax, data
15 mov ds, ax
16 mov ax, stack
17 mov ss, ax
18 mov sp, 16
19 mov si, 0
20 call show_str
21
22 mov ax, 4c00h
23 int 21h
24
25 show_str: push cx
26 mov ax, 0b800h
27 mov es, ax
28 mov di, 1124
29 s : mov cl, [si]
30 mov ch, 0
31 jcxz ok
32 mov es:[di], cl
33 inc di
34 pop cx
35 mov es:[di], cl
36 push cx
37 inc si
38 inc di
39 jmp s
40 ok : pop cx
41 ret
42 code ends
43 end start
DOSBox下执行结果