[信息与通信]第三章 程序设计的基本技术4.pptVIP

[信息与通信]第三章 程序设计的基本技术4.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[信息与通信]第三章 程序设计的基本技术4

3.3 顺序程序设计 3.4 分支程序设计 3.5 循环程序设计 3.6 子程序设计 教学提示 在学习和应用汇编语言进行程序设计时,有一些经常遇到的问题,例如算术运算、代码转换等,需要掌握子程序设计技术。 3.6 子程序设计 把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序。 子程序可以实现源程序的模块化,可以简化源程序结构,可以提高编程效率。 3.6.1 子程序概念 过程名 proc [near|far] ... 过程名 endp 过程名(子程序名)为符合语法的标识符。 NEAR(段内近调用)的过程只能被相同代码段的其他程序调用; FAR(段间远调用)的过程可以被相同或不同代码段的程序调用。 在微型、小型和紧凑存储模式下,缺省属性为near;在中型、大型和巨型存储模式下,缺省属性为far。一般缺省属性为near。可以在过程定义时用near或far改变缺省属性。 子程序调用:进入子程序的操作; 子程序返回:子程序返回到主程序的操作; 主程序与子程序相互传递的信息称为参数 ; 3.6.2 子程序指令 子程序是完成特定功能的一段程序 当主程序(调用程序)需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行 当运行完子程序功能后,采用RET返回指令回到主程序继续执行 1、调用指令CALL 位移量由汇编程序在汇编时进行计算,如下例: CS:0102 CALL 0120H ;3字节 CS:0105 …… 当前(IP)+位移量=目的地址 则位移量为: 0120-0105H=001BH 于是CALL 0120H的机器码为E8 1B 00 CS:0102 E8 CS:0103 1B CALL 0120H CS:0104 00 CS:0105 …… (2)段内间接调用 (3)段间直接调用 (4)段间间接调用 2、返回指令RET 根据段内和段间、有无参数,分成4种类型 RET ;无参数段内返回 RET i16 ;有参数段内返回 RET ;无参数段间返回 RET i16 ;有参数段间返回 需要弹出CALL指令压入堆栈的返回地址 段内返回——出栈偏移地址IP IP←SS:((SP)+1,(SP)), SP←SP+2 段间返回——出栈偏移地址IP和段地址CS IP←SS: ((SP)+1,(SP)) ,SP←SP+2 CS←SS: ((SP)+1,(SP)) ,SP←SP+2 子程序的常见格式 subname proc ;具有缺省属性的subname过程 push ax ;保护寄存器:顺序压入堆栈 push bx ;ax/bx/cx仅是示例 push cx ... ;过程体 pop cx ;恢复寄存器:逆序弹出堆栈 pop bx pop ax ret ;过程返回 subname endp ;过程结束 例3.6.1上 ALDISP PROC ;实现AL中两位十六进制数显示子程序 PUSH AX PUSH CX ;过程中使用了AX、CX和DX PUSH DX PUSH AX ;暂存ax MOV DL,AL ;转换AL的高4位 MOV CL,4 SHR DL,CL OR DL,30h ;AL高4位变成ASCII码 CMP DL,39h JBE ALDISP1 ADD DL,7 ;是0AH~0FH,ASCII码加上7 ALDISP1: MOV AH,2 ;显示 INT 21H 例3.6.1下 POP DX ;恢复原AX值到DX AND DL,0FH ;转换AL的低4位 OR DL,30H CMP DL,39H JBE ALDISP2 ADD DL,7 ALDISP2:MOV AH,2 ;显示 INT 21H POP DX POP CX POP AX RET ;过程返回 ALDISP ENDP 例3.6.1应用 ... ;主程序, loop outlp ;外循环尾 mov bx,offset array ;调用开始,实现输出显示. mov cx,count ;array中的count个字符显示. displp: mov al,[bx] call ALDISP ;调用显示过程 mov dl,, ;显示一个逗号,以分隔两个数据 mov ah,2 int 21h inc bx loop displp ;调用程序段结束 ... ;过程定义 end 3.6.3 子程序的参数传递 入口参数(输入参数):主程序 提供给 子程序 出口参数(输出参数):子程序 返回给 主程序 参数的形式:① 数据本身(传值

您可能关注的文档

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档