汇编语言程序设计简明教程——第5章子程序.ppt

汇编语言程序设计简明教程——第5章子程序.ppt

  1. 1、本文档共156页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言程序设计简明教程——第5章子程序

近程子程序: 只能被同一个代码段里的程序调用的子程序。 由于主程序和子程序处于同一个代码段,调用和返回时只需要改变IP寄存器的值,CS寄存器的值保持不变。 近程子程序的入口地址用16位段内偏移地址表示。 远程子程序: 能够被不同代码段的程序调用,也能被同一代码段的程序调用的子程序。 调用这样的子程序时,需要同时改变CS和IP寄存器的值,返回时,需要从堆栈里弹出32位的返回地址送入IP,CS寄存器。 远程子程序的入口地址用16位段基址和16位段内偏移地址表示。 段间直接调用 格式:CALL FAR PTR 子程序名 操作:SP← SP-2, SS:[SP]← CS SP← SP-2, SS:[SP]← IP (保存32位返回地址,偏移地址保存在较小地址处) IP ← 子程序入口的偏移地址, CS← 子程序入口的段基址 段间间接调用 格式:CALL MEM32 操作:SP← SP-2, SS:[SP] ← CS SP← SP-2, SS:[SP] ← IP IP← [MEM32],CS←[MEM32+2] 无参数段间返回 格式:RET 操作:IP ← SS:[SP], SP ← SP+2 CS ← SS:[SP], SP ← SP+2 有参数段间返回 格式:RET D16 操作:IP ← SS:[SP], SP← SP+2 CS ← SS:[SP], SP← SP+2 SP ← SP+D16 5.1.2 子程序的定义 子程序名 PROC [NEAR/FAR] 子程序体 子程序名 ENDP 说明: 子程序名应为合法的标识符,子程序名不能与同一个源程序中的标号、变量名、其它子程序名相同。 方括号中的内容是子程序的远近属性选项,二者可选其一,如果缺省,默认为NEAR。 用NEAR说明的子程序是“近程子程序”,它只能被与它同一代码段的程序调用。 用FAR说明的子程序是“远程子程序”,它不仅能被与它同一代码段的程序调用,也能被其它代码段的程序调用。 子程序的定义要写在代码段内。 ZEROBYTES PROC ; 定义一个子程序 XOR AX, AX ; AX清零 MOV CX, 128 ; 循环次数送CX ZEROLOOP:MOV [BX], AX ; 将一个字存储单元清零 ADD BX, 2 ; 修改地址 LOOP ZEROLOOP ; 循环控制 RET ; 返回主程序 ZEROBYTES ENDP ; 子程序结束 ZEROBYTES:XOR AX, AX ; AX寄存器清零 MOV CX, 128 ; 计数器CX置初值 ZEROLOOP: MOV [BX], AX ; 一个字单元清零 ADD BX, 2 ; 修改地址指针,指向下一个字 LOOP ZEROLOOP ; 循环控制 RET ; 结束程序运行,返回主程序 CODE SEGMENT ; 代码段开始 MAIN PROC FAR ; 主程序开始 …… ; 主程序的指令序列 MOV AX, 4C00H INT 21H ; 返回DOS MAIN ENDP ; 主程序结束 …… ; 其它程序 CODE ENDS ; 代码段结束 END MAIN ; 源程序结束 CODE SEGMENT ; 代码段开始 MAIN PROC FAR ; 主程序开始 PUSH DS ; 操作系统的返回点在DS: 0 XOR AX, AX PUSH AX ; 把32位返回点地址压入堆栈 …… ; 主程序的指令序列 RET ; 返回DOS MAIN ENDP ; 主程序结束 …… ; 其它程序 CODE ENDS ; 代码段结束 END MAIN ; 源程序结束 [例5.1] 子程序FRACTOR用来计算一个数的阶乘。主程序利用它 计算1~5的阶乘,存入FRA数组。 .386 DATA SEGMENT USE16 FRA DW 5 DUP (?) DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA START:MOV AX, DATA MOV DS, AX MOV EBX, 1 ; BX中存放待求阶乘的数 MOV CX, 5 ; 求阶乘次数(

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档