- 首先是知识拓展部分(关键信息)
- 可通过修改内存地址空间 B8000H~BFFFFH 的数据改变显示器输出结果。
- 屏幕中一个字符占两个字节的储存空间,低位字节储存ASCII码,高位字节储存字符的属性。
- 一行有 80 个字符,一页总共25行
assume cs:codesg, ds:data
data segment
db 'welcome to masm!' ; 要显示的文本
db 00000010b ; 黑底绿色
db 00100100b ; 绿底红色
db 01110001b ; 白底蓝色
data ends
stack segment
dw 8 dup (0) ; 8 个字单元大小的栈
stack ends
codesg segment
start: mov ax, data
mov ds, ax
mov bx, 0
mov ax, 0b800h ; 注意!数据不能以字母开头
mov es, ax
mov bp, 720h ; bp指向第12行的位置
mov ax, stack
mov ss, ax
mov sp, 10h
mov cx, 3 ; 外层循环循环三次
mov di, 10h ; 指向第一个颜色属性
s0: push cx
mov bx, 0
mov cx, 16
mov si, 0
si: mov al, [bx] ; 低位存字母的ASCII码
mov ah, [di] ; 高位存颜色属性
mov es:[bp + si], ax
add si, 2h ; 指向下一个字
inc bx ; 指向下一个字母
loop s
inc di ; 指向下一个颜色
add bp, 0a0h ; 指向下一行
pop cx
loop s0
mov ax, 4c00h
int 21h
codesg ends
end start