当前位置: 首页 > wzjs >正文

网站盈利方法手表网站模板

网站盈利方法,手表网站模板,礼服外贸网站,住宅小区物业管理系统网站建设文章目录 六、子程序设计1. 与子程序相关的指令1)段内直接调用2)段内间接调用3) 段间直接调用4) 段间间接调用 (2)RET 返回指令 2. 子程序的调用和返回3. 子程序的编写方法(1)子程序说明(2&…

文章目录

  • 六、子程序设计
    • 1. 与子程序相关的指令
        • 1)段内直接调用
        • 2)段内间接调用
        • 3) 段间直接调用
        • 4) 段间间接调用
      • (2)RET 返回指令
    • 2. 子程序的调用和返回
    • 3. 子程序的编写方法
      • (1)子程序说明
      • (2)子程序清单
      • (3)现场保护和现场恢复
    • 4. 子程序的参数传递方法
    • 5. 子程序的嵌套与递归

六、子程序设计

子程序:能够完成一定功能的连续指令序列组成的程序段,该程序段再功能上相对独立,可在程序的多个地方被调用,甚至被其他模块调用,具有可重用性和递归性。

调用程序的程序称为主程序或者调用程序。

1. 与子程序相关的指令

(1)CALL 调用指令
(2) RET 返回指令

1)段内直接调用
CALL PROC_NAME

SP ← SP - 2, ((SP)+1,(SP)) ← IP ;返回地址入栈
IP ← IP + disp16 ;转子程序
例 CALL PROC_G ;目标地址的偏移地址在指令中,源程序中给的是子程序名。

2)段内间接调用
CALL reg16
; 或
CALL WORD PTR mem16

SP ← SP - 2,((SP)+1,(SP)) ← (IP) ;返回地址入栈
IP ←(EA) ;转子程序
例:

CALL BX ; 目标地址在寄存器中
CALL WORD PTR [BX+SI]
; 目标地址在存储器中的16位数
3) 段间直接调用
CALL FAR PTR PROC_NAME

SP ← SP - 2, ((SP)+1,(SP)) ← (CS) ;返回地址入栈
SP ← SP - 2, ((SP)+1 (SP)) ← (IP)
IP ← 偏移地址, CS ← 段地址 ;转子程序

CALL FAR PTR PROG_F

目标地址在指令中,源程序中给的是子程序名

4) 段间间接调用
CALL DWORD PTR mem

SP ← SP-2, ((SP)+1, (SP)) ← (CS) ;返回地址入栈
SP ← SP - 2, ((SP)+1, (SP)) ← (IP); 转子程序
(IP) ← (EA), (CS) ← (EA+2)
例:

CALL DWORD PTR [BX]  ; 双字 四字节

目标地址存放在存储器中的32位数。

(2)RET 返回指令

放在子程序的末尾,使子程序执行完毕以后能够返回主程序继续执行原来的程序。
执行该指令后应该把返回地址出栈送IP寄存器,若为段间返回,还需送CS寄存器。

2. 子程序的调用和返回

		.MODEL SMALL.DATA....STACK.CODE
MAIN: MOV AX,@DATA ;主程序MOV DS,AX...CALL SUB_PROC1...CALL SUB_PROC2....SUB_PROC1 PROC ; 子程序1....RETSUB_PROC1 ENDPSUB_PROC2 PROC ; 子程序2...RETSUB_PROC2 ENDPEND MAIN

以上 PROC1, PROC2 属于段内调用

3. 子程序的编写方法

子程序包括两部分:子程序调用说明子程序清单

(1)子程序说明

一个子程序可以被多个主程序调用,一般包括下面几个部分
1)子程序名:调用子程序时候使用。
2)子程序功能和性能:描述子程序完成的功能和性能情况
3)占用的寄存器和存储单元。
4)入口参数:说明子程序执行应该具备的条件
5)出口参数:说明子程序执行后的结果放在哪里
6)子程序调用其他子程序的说明
7)子程序调用示例:说明子程序的调用方法
除了第一点和第二点,其他几点根据不同情况可以省略。 子程序说明如果是放在程序文件中,则全部以注释的形式存在。

(2)子程序清单

子程序的主体
以一个过程名开始,最后以RET指令返回

SUB_PROC1 PROC;子程序1
...
RET
SUB_PROC1 ENDP

(3)现场保护和现场恢复

为了保证主程序在调用子程序后,主程序所用的寄存器的内容不被破坏(作为出口参数的寄存器除外),子程序在完成自己功能前,将要用到的寄存器的值先保存起来,这个过程称为现场保护

等子程序功能执行后,再将这些寄存器的值恢复,这个过程称为现场恢复

现场保护:寄存器的值压栈。
现场恢复:堆栈中弹出到原寄存器。

例:子程序 SUB_PROC1 使用了 AX,BX,SI和DI寄存器
则现场保护和恢复如下

SUB_PROC1 PROC ; 子程序1
PUSH AX     ;保护现场
PUSH BX
PUSH SI
PUSH DI
...
POP DI ; 恢复现场
POP SI
POP BX
POP AX
RET
SUB_PROC1 ENDP

入栈出栈, 先入后出

4. 子程序的参数传递方法

(1) 寄存器传参
简单快捷,但传递参数的数量有限。
(2) 地址表传参
传递的参数较多,但占用存储单元。
(3) 堆栈传参
既省内存又不占寄存器,但要清楚堆栈中内容。

5. 子程序的嵌套与递归

如果一个子程序调用另一个子程序称为子程序嵌套。
如果子程序直接或间接调用它自己则称为递归。

嵌套层次和递归层次均受到堆栈大小的限制。
嵌套注意每一层调用都要进行寄存器的保护和恢复。
子程序必须要有最终停止嵌套的条件。

在这里插入图片描述

http://www.dtcms.com/wzjs/806564.html

相关文章:

  • 佛山专业的网站制作群晖wordpress远程安装
  • 网站怎么推广软文湖北大网站建设
  • 网站建设公司一年多少钱企业网站优化设计的含义
  • 南平建设企业网站做移动网站优化排
  • 柳州企业做网站上传网站安装教程视频
  • 做网站是不是要域名费中国企业500强最新排名名单
  • 农业网站模板WordPress如何做网站流量统计
  • 梅州免费建站公司软装
  • 餐饮技术支持东莞网站建设想做苗木生意网站怎么怎么做
  • 外贸网站源码哪个好企业做网站需要的资料
  • 网站编程培训机构自己组装电脑做网站服务器
  • wordpress 手机 自建站响应式网站手机端
  • 专业的网站建设电话杏坛餐饮网站建站
  • 怎么健免费网站吗太原建设网站
  • 鹤岗做网站搜狗网站推广
  • 做论坛网站如何赚钱招聘网官网
  • 网页登录惠州seo
  • 网站开发费用怎么入账wordpress网站底部导航代码
  • 长春企业公司网站建设个人备案网站名称怎么写
  • 网站推广平台排行今科网站建设公司
  • 做网站常规语言自动城市定位装修网站建设
  • 商务网站建设的一般流程是什么?wordpress宝塔优化
  • 广州 创意的网站设计wordpress付费附件下载
  • 如何知道网站什么时候做的深圳附近做个商城网站多少钱
  • 公司做网站能够带来的好处排名好的移动网站建设
  • 微信网站开发服务建设银行成都 招聘网站
  • 免费建立网站的有哪里一级A做爰片安全网站
  • 五种常见的软件架构东莞seo网络培训
  • 专门做网站推广的平台海南百度首页广告
  • 惠州哪个房地产网站做的比较好拼多多关键词排名查询工具