1 assume cs:code, ds:data
2 data segment
3 db 'welcome to masm!', 0
4 data ends
5
6 code segment
7 start: mov ah, 8
8 mov al, 3
9 mov cl, 2
10 mov ax, data
11 mov ds, ax
12 mov si, 0
13 call show_str
14
15 mov ax, 4c00h
16 int 21h
17
18 ; 名称:show_ptr
19 ; 功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
20 ; 参数:(dh)=行号(1~25), (dl)=列号(1~80)
21 ; (cl)=颜色, ds:si指向字符串的首地址
22 show_str: push cx
23 push si
24
25 mov al, 0A0h ; 每行是80*2
26
27 dec dh ; 行号在显存的下标从0开始
28 mul dh ; (ax) = (al)*(dh)
29
30 mov bx, ax
31
32 mov al, 2
33 mul dl
34 sub ax, 2 ; 行号在显存的下标从0开始
35
36 add bx, ax ; bx存放的是行和列的偏移地址
37
38 mov ax, 0b800h
39 mov es, ax ; es中存放的是显存的第0页(共0-7页)的起始段地址
40
41 mov di, 0 ; di指向显存的偏移地址
42 43
44 mov al, cl ; al保存颜色
45
46 mov ch, 0
47 s: mov cl, ds: [si]
48 jcxz ok
49 mov es:[bx][di], cl ; 偶数地址存放字符
50 mov es:[bx][di+1], al ; 奇数地址颜色属性
51
52 inc si
53 add di, 2
54 jmp short s
55
56 ok: pop si
57 pop cx
58 ret
59
60 code ends
61 end start