第十六章:直接定址表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:清屏

[codesyntax lang="asm"]

sub1:      push bxpush cxpush esmov bx,0b800hmov es,bxmov bx,0mov cx,2000
sub1s:    mov byte ptr es:[bx],' 'add bx,2loop sub1spop espop cxpop bxret

[/codesyntax]

功能子程序2:设置前景

[codesyntax lang="asm"]

sub2:   push bxpush cxpush esmov bx,0b800hmov es,bxmov bx,1mov cx,2000
sub2s:  and byte ptr es:[bx],11111000b  or es:[bx],al add bx,2loop sub2spop espop cxpop bxret

[/codesyntax]

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

[codesyntax lang="asm"]

sub3:  push bxpush cxpush esmov cl,4shl al,clmov bx,0b800hmov es,bxmov bx,1mov cx,2000
sub3s:  and byte ptr es:[bx],10001111bor es:[bx],al add bx,2loop sub2spop espop cxpop bxret

[/codesyntax]

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

参考源码:相关代码下载   我们可以将这些功能子程序的入口地址存储在一个表中,它们在表中的位置和功能号相对应。

对应的映射关系为:

功能号*2 = 对应的功能子程序在地址表中的偏移。   源代码实现:相关代码下载   当然,我们也可以将子程序setscreen如下实现:相关代码下载   显然,用通过比较功能号进行转移的方法,程序结构比较混乱,不利于功能的扩充。 比如说,在 setscreen 中再加入一个功能,则需要修改程序的逻辑,加入新的比较、转移指令。 用根据功能号查找地址表的方法,程序的结构清晰,便于扩充。 如果加入一个新的功能子程序,那么只需要在地址表中加入它的入口地址就可以了。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LIDEZGUBQKQD']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/06/05/3846103.html

直接定址表03 - 零基础入门学习汇编语言74相关推荐

  1. 外中断03 - 零基础入门学习汇编语言71

    第十五章:外中断03 让编程改变世界 Change the world by program 继续编写int 9中断例程 第三步:如果是Esc键的扫描码,改变显示的颜色后返回...... 那么,下一个 ...

  2. 第一个程序03 - 零基础入门学习汇编语言22

    第四章:第一个程序03 让编程改变世界 Change the world by program 可执行文件中的程序装入内存并运行的原理 在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的 ...

  3. 转移指令的原理03 - 零基础入门学习汇编语言45

    第九章:转移指令的原理03 让编程改变世界 Change the world by program jcxz指令 jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移 ...

  4. [BX]和loop指令03 - 零基础入门学习汇编语言25

    第五章:[BX]和loop指令03 让编程改变世界 Change the world by program 从上边的课程中,我们可以总结出用cx和loop 指令相配合实现循环功能的三个要点: (1)在 ...

  5. 外中断02 - 零基础入门学习汇编语言70

    第十五章:外中断02 让编程改变世界 Change the world by program 小甲鱼和大家谈谈心 一个帖子引发小甲鱼的反省! 猫姐曾经说过,步子别迈太大,容易扯着蛋! 结果还真蛋疼了- ...

  6. 函数03 - 零基础入门学习C语言34

    第七章:函数03 让编程改变世界 Change the world by program 函数的调用 函数调用的一般形式 函数调用的一般形式为: 函数名(实参表列)   如果是调用无参函数,则&quo ...

  7. 数据类型,运算符和表达式03 - 零基础入门学习C语言04

    第二章:数据类型,运算符和表达式03 让编程改变世界 Change the world by program 字符型数据 字符型数据包括字符常量和字符变量 字符常量: 是用单引号括起来的一个字符. 例 ...

  8. 围观窗体与组件03 - 零基础入门学习Delphi25

    围观窗体与组件03 让编程改变世界 Change the world by program 围观按钮型组件 Button.BitBtn.SpeedButton的一些区别 区别一:Button 不能显示 ...

  9. 结构化程序设计03 - 零基础入门学习Delphi12

    结构化程序设计03 让编程改变世界 Change the world by program 循环结构语句 顺序结构和选择结构只能完成一些简单功能,实际的程序也很少只由顺序结构和选择结构组成. 例如小甲 ...

最新文章

  1. R语言ggplot2可视化条形图可视化控制底部和x轴之间没有空格实战:即条形图的底部直接和坐标轴连接
  2. FileInputStream 之read(byte [] b)方法
  3. OpenCV学习(12) 图像的腐蚀与膨胀(3)
  4. windows boot files
  5. WebBrowser内存泄露
  6. stringutils_番石榴分配器vs StringUtils
  7. QJson数据用法实例
  8. 基于51单片机的函数信号发生器
  9. hbase 页面访问_HBase在滴滴出行的应用场景和最佳实践
  10. 刷题总结——Tree2cycle(hdu4714 树形dp)
  11. 查找计算机所有图片文件夹,win10系统搜索电脑里的所有图片的操作方法
  12. Python 菜单中的分割线
  13. html制作横向菜单,CSS 横向菜单的制作
  14. 阴阳师服务器维护6,《阴阳师》手游6月24日维护更新公告
  15. 简易火锅店点餐结算小程序
  16. 笔记:Linux系统调用在文件中的分布情况
  17. AD软件——把原理图库 和 PCB元件库封装模型 关联起来
  18. 百度地图marker标注上如何加上数字
  19. 写作必备文献搜索网大全
  20. java apache 日志_了解Apache的访问日志

热门文章

  1. 【C++多线程系列】【七】实现经典的C/S架构
  2. web框架flask(4)——数据库
  3. 图数据库Neo4j全栈Web技术解密
  4. Https 客户端与服务器交互过程梳理(转)
  5. 我的第一个Flex Project
  6. AJAX是否能够取代桌面应用程序
  7. Ubuntu下用gcc与nasm联合编译
  8. HTML DOM Table 对象
  9. Fragment实现的底部导航
  10. 通过点击热区,有个href 跳到servlet,怎么把页面上的值传到servlet里面?