马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
“在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'”,你怎么理解这段话?
反正我的理解是“先显示绿色,然后显示绿底红色,然后再显示白底蓝色,后面的显示覆盖掉前面的显示”,后来我发现我想多了。。。
不管怎么说,贴代码吧。。。assume cs:code, ds:data
data segment
db 'welcome to masm!'
db 2, 24h, 71h
data ends
stack segment stack
dw 8 dup(0)
stack ends
code segment
start: mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
; 初始颜色为黑底绿色
mov bl, 2
; 初始化cx的值
mov cx, 29
draw: push cx
xor si, si
xor di, di
; 初始化完毕
mov cx, (2000 - 16) / 2
before: mov byte ptr es:[di], 0 ; 抹掉原来的内容
inc di
mov es:[di], bl ; 颜色
inc di
loop before
; 前面的内容绘制完了
mov cx, 16
line: mov al, [si]
mov es:[di], al
inc di
inc si
mov es:[di], bl ; 颜色
inc di
loop line
; 文字绘制完了
mov cx, (2000 - 16) / 2
after: mov byte ptr es:[di], 0 ; 抹掉原来的内容
inc di
mov es:[di], bl ; 颜色
inc di
loop after
; 绘制完毕
; 简单的延时
mov dx, 2000
delay: mov cx, 3000
loop $
dec dx
jnz delay
pop cx
; 用计数的余数来获取字体信息的位置
mov ax, cx
mov bx, 3
div bl
mov bl, ah
xor bh, bh
; 获取字体信息
mov al, 10h[bx]
mov bl, al
loop draw
mov ax, 4c00h
int 21h
code ends
end start
最终效果
|