- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第03章 汇编语言程序设计4_子程序设计课件
4.3 子程序设计 一、引言 一、引言 把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序 子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率 主程序(调用程序)需要利用CALL指令调用子程序(被调用程序) 子程序需要利用RET指令返回主程序 二、过程定义和子程序编写 汇编语言中,子程序要用一对过程伪指令PROC和ENDP声明,格式如下: 过程名 PROC [NEAR|FAR] …… ;过程体 RET 过程名 ENDP 可选的参数指定过程的调用属性。没有指定过程属性,则采用默认属性 NEAR属性(段内近调用)的过程只能被相同代码段的其他程序调用 FAR属性(段间远调用)的过程可以被相同或不同代码段的程序调用 二、过程定义和子程序编写 例1: 用显示器功能调用输出一个字符的子程序 dpchar proc ;过程定义,过程名为dpchar push ax ;顺序入栈,保护寄存器 push bx mov bx,0 mov ah,0eh ;显示器0EH号输出一个字符功能 int 10h pop bx ;逆序出栈,恢复寄存器 pop ax ret ;子程序返回 dpchar endp ;过程结束 完整源程序之主程序 .model small .stack .data .code start: mov ax,@data mov ds,ax mov al,‘?’ ;主程序提供显示字符 call dpchar ;调用子程序 mov ax,4c00h int 21h 完整源程序之子程序 dpchar proc ;过程定义,过程名为dpchar push ax ;顺序入栈,保护寄存器 push bx mov bx,0 mov ah,0eh ;显示器0EH号输出一个字符功能 int 10h pop bx ;逆序出栈,恢复寄存器 pop ax ret ;子程序返回 dpchar endp ;过程结束 end start 三、调用和返回指令 调用指令 CALL 调用分类 (1)段内调用和段间调用 段内:仅改变IP值 段间:改变CS和IP (2)直接调用和间接调用 段内调用 即被调过程为近过程时,call指令执行的操作为: SP←SP-2,(SP+1,SP)←IP IP ←子程序入口地址; 段内调用举例 段内直接调用: CALL PROC-NAME 子过程名为PROC-NAME ,在当前代码段。 执行时,子过程名PROC-NAME送IP。 段内寄存器间接调用: CALL SI SI中存放的是当前代码段子过程名。执行时,SI送IP中。 段内存储器间接调用: CALL MEM-W MEM-W为数据段字单元地址,该地址单元的内容为子程序的偏移量,执行时,(MEM-W)→IP。 段间调用 即被调过程为远过程时,call指令的操作为: SP←SP-2,(SP+1,SP)←CS SP←SP-2,(SP+1,SP)←IP CS←被调程序段名, IP ←被调程序的偏移量地址; 段间调用举例 段间直接调用: CALL FAR PTR PROC-NAME 执行时,将属性为FAR、过程名为PROC-NAME所在的段基值和偏移量地址送CS和IP 。 段间存储器间接调用: CALL DWORD PTR MEM-D 执行时,将数据段中MEM-D开始的连续4个字节,依次送如IP、CS中 。这4个字节的内容是事先存放的子程序的偏移地址和代码段地址。 CALL DWORD PTR [BX] 同上类似。且BX指向内存数据段连续4个字节的内容为子程序偏移量和代码段地址。 三、调用和返回指令 返回指令 格式:RET [n] 其中:n为可选项, 用来冲掉CALL前压入堆栈中的参数。 段内返回举例 RET ;IP ←(SP+1,SP), SP ←SP+2 RET 4 ;IP ←(SP+1,SP), SP ←SP+2 ;SP ←SP+4 段间返回举例 RET ;IP ←(SP+1,SP) ;SP ←SP+2 ;CS ←(SP+1,SP) ;SP ←SP+2 RET 10 ; ;IP ←(SP+1,SP),SP ←SP+2 ;CS ←(SP+1,SP),SP ←SP+2 ;SP ←SP+10 四、子程序设计方法 1 现场保护和恢复 ①利用堆栈,最方便的方法;
您可能关注的文档
- Safe@office小企业安全解决方案课件.ppt
- SYS-2722基本培训课件.ppt
- TCL集团SWOT分析课件.ppt
- 不确定性决策方法课件.ppt
- SAP ABAP程序设计基础教程第11章课件.ppt
- 不确定关系、波函数课件.ppt
- 不动产估价练习题课件.ppt
- 不良贷款清收讲义课件.ppt
- SWOT分析课件.ppt
- TEC 电子商务交易模式课件.ppt
- 2025年广西中考地理二轮复习:专题四+人地协调观+课件.pptx
- 2025年广西中考地理二轮复习:专题三+综合思维+课件.pptx
- 2025年中考地理一轮教材梳理:第4讲+天气与气候.pptx
- 第5讲+世界的居民课件+2025年中考地理一轮教材梳理(商务星球版).pptx
- 冀教版一年级上册数学精品教学课件 第1单元 熟悉的数与加减法 1.1.6 认识1-9 第6课时 合与分.ppt
- 2025年中考一轮道德与法治复习课件:坚持宪法至上.pptx
- 2025年河北省中考一轮道德与法治复习课件:崇尚法治精神.pptx
- 八年级下册第二单元+理解权利义务+课件-2025年吉林省中考道德与法治一轮复习.pptx
- 精品解析:湖南省娄底市2019-2020学年八年级(上)期中考试物理试题(原卷版).doc
- 2025年中考地理一轮教材梳理:第10讲+中国的疆域与人口.pptx
文档评论(0)