80x86汇编语言:INT 10H 的应用

来源:互联网 发布:windows ad域管理软件 编辑:程序博客网 时间:2024/06/06 14:01

做而论道以前写了几次直接写屏的程序,比如下面列出的一些。


直接写屏:

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)


提问者评价:谢谢大虾!谢谢您的热心,我已运行是正确的!


0 0