• 寄存器的保护与恢复与相关子程序的书写


    子程序为了完成一些功能,通常要使用一些寄存器来存放内容,有时候还要使用一些存储单元来存放内容,也就是说,在子程序运行时通常会破坏一些寄存器原有的内容,如果不采取措施,在调用子程序之后,主程序就无法在使用存放在这些寄存器或者存储单元的原有内容了,这常常会导致主程序错误,为此,要对有关的寄存器或存储单元进行保护和恢复

    寄存器的保护和恢复的方法有两种

    【1】把需要保护的寄存器的内容,在主程序中压入堆栈和弹出堆栈,这种方法的优点是在每次调用子程序的时候,只要把主程序所关心的寄存器压入堆栈即可,但是缺点是在主程序中使用压入和弹出堆栈操作会使得主程序不容易理解,如果要多次调用子函数,常常会忘记把某个寄存器压入堆栈

    【2】在子程序一开始就把子程序中要改变的寄存器内容压入堆栈,在返回之前在恢复这些寄存器的内容这是一种常用的方法

    子程序的书写举例

    例题1,写一个把ASCII码则表示的两位十进制数转换为对应二进制数的子程序

     1 ;入口参数:DH = 十位数ASCII码,DL = 个位数ASCII码
     2 ;出口参数AL = 对应二进制数
     3 SUBR        PROC
     4                     MOV     AL,DH
     5                     AND AL,0FH
     6                     MOV AH,10
     7                     MUL AH
     8                     MOV AH,DL
     9                     AND AH,0FH
    10                     ADD AL,AH
    11                     RET
    12 SUBR         ENDP
    View Code

    例题2:写一个把16位二进制数转换为4位十六进制数ASCII码的子程序

     1 ;入口参数:DX= 欲转换的二进制数
     2 ;                            DS:BX = 存放转换所得ASCII码串的缓冲区首地址
     3 ;出口函数:十六进制数ASCII码串按照高位到低位的顺序存放在指定的缓冲区中
     4 HTASCS            PROC
     5                 MOV         CX,4
     6 HTASCS1:ROL DX,1
     7                     ROL  DX,1
     8                     ROL  DX,1
     9                     ROL  DX,1
    10                     MOV AL,DL
    11                     CALL HTOASC
    12                     MOV [BX],AL
    13                     INC BX
    14                     LOOP HTASCS1
    15                     RET
    16 HTASCS        ENDP
    View Code

    版权所有,转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3705228.html

  • 相关阅读:
    <iframe>相关问题
    文字描边
    jquery 设置css margin-left
    uni-app mustache表达式
    Uni-app 响应式像素upx
    Uni-app页面进入和返回
    Uni-app 生命周期
    Sql添加/删除默认值
    Uni-app初体验(创建新路由)
    Uni-app初体验(页面绑定数据)
  • 原文地址:https://www.cnblogs.com/fengdashen/p/3705228.html
Copyright © 2020-2023  润新知