如何使用汇编在dos界面上显示字体和颜色--学习心得笔记

时间:2022-09-02 19:19:52

最近在学习王爽老师编著的《汇编语言》,王老师深入浅出的讲述,使得汇编语言的学习难度大为降低,文章不再是晦涩难懂,只要你肯花时间,所有书上讲述的内容都可以弄懂,这几天我刚学到第九章,实验九要求我们自己在屏幕的*显示三行不同颜色和底色的字符串,用的是80*25彩色模式,即在内存B8000~BFFFF段的32kb内存中写入数据,原理书本上讲得很清楚,下面是我的实现代码:

assume cs:code, ds:data, ss:stack
data segment
db 'welcome to masm!';字符段
db 16 dup(02h);绿色字体信息
db 16 dup(00100100b);绿底红色
db 16 dup(01110001b);白底蓝色
data ends 
stack segment ;栈段
db 0, 0, 0, 0
stack ends
code segment
start: mov ax, data ;获得数据段地址
mov ds, ax ;获取段地址
mov bx, 0 ;数据段偏移地址寄存器
mov cx, 3 ;welcome to masm!为16个字符
mov di, 0 ;颜色信息索引

mov ax, stack
mov ss, ax ;获得段寄存器地址
mov sp, 4

mov ax, 1011100000000000b;获得显示区段地址,B800
mov es, ax
mov si, 1660

s0: push cx
mov cx, 16

s: mov al, ds:[bx];将字符移入寄存器
mov es:[si], al;将字符移入显示区
mov al, ds:[bx].16[di];将颜色信息移入寄存器
mov es:[si].1, al;将颜色信息移入显示区
add si, 2
inc bx
loop s

add si, 128 ;进入下一行
add di, 16 ;进入下一个串的字体信息段
mov bx, 0
pop cx
loop s0

mov ax, 4c00h
int 21h
code ends
end start

运行后,实现效果如下:

如何使用汇编在dos界面上显示字体和颜色--学习心得笔记