直接定址表03 – 零基础入门学习汇编语言74

第十六章:直接定址表03让编程改变世界Change the world by program程序入口地址的直接定址表我们看下面的问题:实现一个子程序setscreen ,为显示输出提供如下功能:(1)清屏。(2)设置前景色。(3)设置背景色。(4)向上滚动一行那么入口参数如何设置呢?入口参数说明:(1)用ah 寄存器传递功能号:0 表示清屏,1表

第十六章:直接定址表03

让编程改变世界

Change the world by program

程序入口地址的直接定址表

我们看下面的问题:

实现一个子程序setscreen ,为显示输出提供如下功能:

(1)清屏。

(2)设置前景色。

(3)设置背景色。

(4)向上滚动一行

那么入口参数如何设置呢?

入口参数说明:

(1)用ah 寄存器传递功能号:

0 表示清屏,

1表示设置前景色,

2 表示设置背景色,

3 表示向上滚动一行;

(2)对于2、3号功能,用al传送颜色值,

(al)∈{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }

下面,我们讨论一下各种功能如何实现 :

(1)清屏

将显存中当前屏幕中的字符设为空格符;

(2)设置前景色

设置显存中当前屏幕中处于奇地址的属性字节的第0、1、2位;

(3)设置背景色

设置显存中当前屏幕中处于奇地址的属性字节的第4、5、6位;

(4)向上滚动一行

依次将第 n+1行的内容复制到第n行处:最后一行为空。

我们将这4 个功能分别写为 4 个子程序,请读者根据编程思想,自行读懂下面的程序。

程序功能分别实现讲解:gogogo —->>>

功能子程序1:清屏

sub1:      

        push bx

        push cx

        push es

        mov bx,0b800h

        mov es,bx

        mov bx,0

        mov cx,2000

sub1s:   

        mov byte ptr es:[bx],

        add bx,2

        loop sub1s

        pop es

        pop cx

        pop bx

        ret

功能子程序2:设置前景

sub2:       

        push bx

        push cx

        push es

        mov bx,0b800h

        mov es,bx

        mov bx,1

        mov cx,2000

sub2s:       

        and byte ptr es:[bx],11111000b       

        or es:[bx],al

        add bx,2

        loop sub2s

        pop es

        pop cx

        pop bx

        ret

功能子程序3:设置背景色

sub3:       

        push bx

        push cx

        push es

        mov cl,4

        shl al,cl

        mov bx,0b800h

        mov es,bx

        mov bx,1

        mov cx,2000

sub3s:       

        and byte ptr es:[bx],10001111b

        or es:[bx],al

        add bx,2

        loop sub2s

        pop es

        pop cx

        pop bx

        ret

功能子程序4:向上滚动一行

参考源码:相关代码下载

我们可以将这些功能子程序的入口地址存储在一个表中,它们在表中的位置和功能号相对应。

对应的映射关系为:

功能号*2 = 对应的功能子程序在地址表中的偏移。

源代码实现:相关代码下载

当然,我们也可以将子程序setscreen如下实现:相关代码下载

显然,用通过比较功能号进行转移的方法,程序结构比较混乱,不利于功能的扩充。

比如说,在 setscreen 中再加入一个功能,则需要修改程序的逻辑,加入新的比较、转移指令。

用根据功能号查找地址表的方法,程序的结构清晰,便于扩充。

如果加入一个新的功能子程序,那么只需要在地址表中加入它的入口地址就可以了。

视频下载
技术, IT技术, 汇编语言, 视频教程