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


    第十六章:直接定址表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 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
    [/codesyntax]    

    功能子程序2:设置前景

    [codesyntax lang="asm"]
    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
    [/codesyntax]  

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

    [codesyntax lang="asm"]
    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
    [/codesyntax]  

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

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

    对应的映射关系为:

    功能号*2 = 对应的功能子程序在地址表中的偏移。   源代码实现:相关代码下载   当然,我们也可以将子程序setscreen如下实现:相关代码下载   显然,用通过比较功能号进行转移的方法,程序结构比较混乱,不利于功能的扩充。 比如说,在 setscreen 中再加入一个功能,则需要修改程序的逻辑,加入新的比较、转移指令。 用根据功能号查找地址表的方法,程序的结构清晰,便于扩充。 如果加入一个新的功能子程序,那么只需要在地址表中加入它的入口地址就可以了。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LIDEZGUBQKQD']视频下载[/Downlink]
  • 相关阅读:
    Richardson成熟度模型:关于REST的不同风格
    领域驱动设计
    dubbo初探
    pom使用异常问题
    [转]解决BootStrap validator验证的图标错位问题
    万恶的360浏览器
    利用Barcode4j实现输出ean13条形码到文件、流的工具类
    使用hibernate中的hql进行分页设置setMaxResults(int a)出错,索引1越界,hql执行不了等等问题
    Mysql 5.6以上版本zip安装方法
    Hibernate5生成的映射文件导致findByExample无法正确查询到结果
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3846103.html
Copyright © 2020-2023  润新知