- 1、本文档共58页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言(天津大学)chapter 6课件
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用 §6.1 子程序的设计方法 一、子程序指令 二、子程序的调用与返回 三、现场的保护与恢复 四、子程序参数的传递 一、子程序指令 子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行 一、子程序指令—调用指令 CALL指令分成4种类型(类似JMP) CALL label ;段内调用、直接寻址 CALL r16/m16 ;段内调用、间接寻址 CALL far ptr label ;段间调用、直接寻址 CALL far ptr mem ;段间调用、间接寻址 CALL指令需要保存返回地址: 段内调用——入栈偏移地址IP SP←SP-2,SS:[SP]←IP 段间调用——入栈偏移地址IP和段地址CS SP←SP-2,SS:[SP]←CS SP←SP-2,SS:[SP]←IP 一、子程序指令—返回指令 根据段内和段间、有无参数,分成4种类型 RET ;无参数段内返回 RET i16 ;有参数段内返回 RET ;无参数段间返回 RET i16 ;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回——出栈偏移地址IP IP←SS:[SP], SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2 一、子程序指令—返回指令RET的参数 RET i16 ;有参数返回 RET指令可以带有一个立即数i16,完成RET操作后,堆栈指针SP将增加,即 SP←SP+i16 这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数 二、子程序的调用与返回 二、子程序的调用与返回 —书写形式(同一代码段内) 二、子程序的调用与返回 —书写形式(不同代码段) 三、现场的保护与恢复 现场:主程序转向子程序之前,其所使用的一些资源的状态(如标志位、R/M等) 子程序与主程序分别编制,通常会导致使用的资源发生冲突而影响主程序在调用子程序之后的正确执行 方法:利用堆栈 在主程序中进行 在子程序中进行 三、现场的保护与恢复 —在主程序中进行 …… PUSH BX PUSH AX CALL SUB1 POP AX POP BX …… 三、现场的保护与恢复 —在子程序中进行 SUB1 PROC PUSH BX PUSH AX …… POP AX POP BX RET SUB1 ENDP 四、子程序参数的传递 入口参数(输入参数):主程序提供给子程序 出口参数(输出参数):子程序返回给主程序 参数的形式: ① 数据本身(传值) ② 数据的地址(传址) 传递的方法: ① 寄存器 ② 变量 ③ 堆栈 四、子程序参数的传递 通过寄存器传送参数 例6.3十进制到到十六进制转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式显示出来。 四、子程序参数的传递 Decihex segment assume cs:decihex Main proc far Repeat :call decibin call crlf call binihex call crlf jmp repeat Main endp 四、子程序参数的传递 Decibin proc near mov bx,0 newchar: mov ah,1 int 21h sub al,30h jl exit cmp al,9d jg exit cbw 四、子程序参数的传递 Binhex proc near mov ch,4 rotate: mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah jl printit add al,7h 四、子程序参数的传递 Crlf proc near mov dl,0dh mov ah,2 int
文档评论(0)