做而论道以前写了几次直接写屏的程序,比如下面列出的一些。
直接写屏:
http://hi.baidu.com/do_sermon/item/3bb9b94b3ba6b6ed1e19bc82
用写显示缓冲区的方法,显示彩色文字:
http://hi.baidu.com/do_sermon/item/13c71ad037a70fe93dc2cbd9
要过年了,送个福字:
http://hi.baidu.com/do_sermon/item/87c112f63ab1eec50cd1c806
……
有些网友留言或来信咨询显存地址和屏幕显示位置的关系问题,光标显示/关闭...等问题。
直接写屏的优点是速度快,但是其功能的花样,远远不如 INT 10H 那么多。
INT 10H 是 BOIS 中断,主板厂家将其烧写在主板上的 ROM 中。
INT 10H 的功能很多,其参数几乎把 AX、BX、CX、DX 都用到了。
显示字符前,先应该设定光标位置:
MOV AH, 2 ;设定光标位置
MOV DX, 0C1EH ;第12行、30列
INT 10H
行列号码,在这里表现的比较清晰,比缓存地址的计算要简单一些。
显示字符时,可以使用 BL 设置颜色和背景:
MOV AH, 9 ;显示字符
;AL为字符的ASCII
MOV BL, 1EH ;蓝色背景、黄色字符
MOV BL, 2CH ;绿底红色的字符
MOV CX, 1 ;显示一个字符
INT 10H ;显示
做而论道以前也用 INT 10H 写过一个在屏幕上实时显示时间的程序:
链接:http://hi.baidu.com/do_sermon/item/3cd7910a27495a6ad45a1191
但是这里面,用到了中断驻留的技术,很多人看不懂。
下面是另一个利用 INT 10H 显示的简单实例,应该可以理解。
用汇编语言在屏幕中间分别显示绿色,绿底红色的字符串“welcome to masm!”
2011-05-18 16:27 提问者采纳
题目链接:http://zhidao.baidu.com/question/269080580.html
做而论道编写的程序如下:
;----------------------------------
DATA SEGMENT
x DB 'welcome to masm!', 0
DATA ENDS
;----------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV BX, OFFSET x
MOV DX, 0C1EH ;第12行、30列.
;--------------------------
NEXT:
MOV AL, [BX] ;取来字符.
CMP AL, 0 ;为0吗?
JZ EXIT ;为0就结束.
MOV AH, 2 ;设定光标位置.
INC DX
INT 10H
;--------------------------
PUSH BX
MOV AH, 9 ;显示字符.
; ;AL为字符的ASCII
; MOV BL, 1EH ;蓝色背景、黄色字符.
MOV BL, 2CH ;绿底红色的字符.
MOV CX, 1 ;显示一个字符.
INT 10H ;显示
POP BX
;--------------------------
INC BX
JMP NEXT
EXIT:
MOV AH, 4CH
INT 21H ;返回DOS
CODE ENDS
END START
;===============
上述程序运行的显示效果如下图所示。
(这里就不插图了,还是看题目的链接吧。http://zhidao.baidu.com/question/269080580.html)
提问者评价:谢谢大虾!谢谢您的热心,我已运行是正确的!