汇编语言BIOS 中断例程应用

int IOh中断例程是BIOS提供的中断例程,其中包含了多个和屏幕输出相关的子程序。
一般来说,一个供程序员调用的中断例程中往往包括多个子程序,中断例程内部用传递进来的参数来决定执行哪一个子程序。BIOS和DOS提供的中断例程,都用ah来传递内部子程序的编号。
下面看一下int IOh中断例程的设置光标位置功能。

// int 10h 中断例程的设置光标位置功能。
mov ah , 2      ; 置光标
mov bh , 0      ; 第0页
mov dh , 5      ; dh 中放行号
mov dl , 12     ; dl 中放列号
int 10h
10h 号中断的2号设置光标位置功能不会自动偏移光标,所以必须每次dl+1

(ah)=2表示调用第10h号中断例程的2号子程序,功能为设置光标位置,可以提供光标所在行号(80*25字符模式下:0~24)、列号(80*25字符模式下:0~79),和页号作为参数。
(bh)=0,(dh)=5,(dl)=12,设置光标到第0页,第5行,第12列
bh中的页号的含义:内存地址空间中,B8000h~BFFFFh 共32K的空间,为80*25彩色字符模式的显示缓冲区。一屏的内容在显示缓冲区中共占 4000 个字节。
显示缓冲区为8页,每页4K,显示器可以显示任意一页的内容,显示第0页的内容就是显示B8000~B8F9F中的4000个字节的内容将出现在显示器
再看一下int 10h中断例程的在光标位置显示字符功能。

// int 10h 中断例程的光标位置显示字符功能
mov ah , 9          ; 光标位置开始显示字符
mov al , 'a'        ; 字符
mov bh , 0          ; 第0页
mov bl , 7          ; 颜色属性
mov cx , 3          ;字符重复个数
int 10h

(ah)=9 表示调用第 10h 号中断例程的9号子程序,功能为在光标位置显示字符,可以提供要显示的字符、颜色属性、页号、字符重复个数作为参数。
b1中的颜色属性的格式如下。

  7   6  5  4 3  2  1  0
含义BL  R  G  B  I  R  G  B
    闪烁 背景    高   亮前景

可以看出,和显存中的属性字节的格式相同。
编程:在屏幕的5行12列显示3个红底高亮闪烁绿色的,'a'


;编程:在屏幕的第12行40列显示3个红底高亮闪烁绿色的'a'
assume cs:code
code segment
        mov ah , 2
        mov bh , 0
        mov dh , 12
        mov dl , 40
        int 10h

        mov ah , 9
        mov al , 'a'
        mov bh , 0
        mov bl , 11001010b   
        mov cx , 3
        int 10h

        mov ax , 4c00h
        int 21h
code ends
end

注意,闪烁的效果必须在全屏DOS方式下才能看到。


发布日期:

所属分类: 编程 标签:  


没有相关文章!