汇编语言-子程序课件.pptVIP

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

本章学习要点: (1)子程序的编写格式 (2)子程序调用时的参数传递方法 (3)嵌套及递归子程序 一、过程定义语句(process) 利用过程定义伪指令语句,可把程序片段说明为具有近类型或远类型的过程,并且能给过程取一个名字。 过程定于语句的格式如下: 过程名 PROC [NEAR | FAR] … 过程名 ENDP 过程的类型在过程定义开始语句PROC中指定; 过程可以被指定位近(NEAR)类型,也可以被指定为远类型。如果不指定,则通常默认为近类型; 定义一个过程的开始语句PROC和结束语句ENDP前使用的过程名称必须一致,从而保持配对。; 像普通标号一样,过程名具有段值、偏移和类型这三个属性。 过程名的段值和偏移是对应过程入口(过程定义开始伪指令语句后的指令语句)的段值和偏移。 例:下面程序片段运行后,AL=?,BL=?。 XOR AL , AL CALL SUBS MOV BL , AL CALL SUBS RCR AL , 1 HLT ;停机,halt SUBS PROC NEAR NOT AL JS NEXT STC ;CF=1, SeT Cf = 1 NEXT : RET SUBS ENDP; 例:用程序调用的方法,完成一个把16位二进制数转换为4位十六进制ASCII码的转换程序。 子程序说明:入口参数:DX=欲转换的二进制数; DS:BX=存放转换所得ASCII码串的缓冲区首地址,转换后的ASCII码串按照高位到低位的次序存放在指定的缓冲区中。 HTASCS PROC RET MOV CX , 4 HTASCS ENDP HTASCS1: ROL DX , 1 HTOASC PROC NEAR ROL DX , 1 AND AL , 0FH ROL DX , 1 ADD AL , 30H ROL DX , 1 CMP AL , 39H MOV AL , DL JBE HTOASC1 CALL HTOASC ADD AL , 7 MOV [BX] , AL HTOASC1: RET INC BX HTOASC ENDP LOOP HTASCS1; 二、主程序与子程序间的参数传递 主程序在调用子程序时,往往要向子程序传递一些参数;同样地,子程序运行后夜经常要把一些结果传会给主程序。主程序和子程序之间的这种信息传递称为参数传递。 有多种参数传递的方法: (1)寄存器传递法 (2)约定内存单元传递法 (3)堆栈传递法 (4)其它方法 1.利用寄存器传递参数 利用寄存器传递参数就是把参数放在约定的寄存器中。这种方法适用于传递参数较少的情况。; 例:写一个大写字母转换为小写字母的子程序 ;子程序名:UPTOLW ;功能:大写字母转换为小写字母 ;入口参数:AL=字符的ASCII码 ;出口参数:AL=字符的ASCII码 ;说明:如字符为大写字母,则转换为小写,其它字符不变。 UPTOLW PROC PUSHF ;保护各标志 CMP AL , ‘A’ JB UPTOLW1 CMP AL , ‘Z’ JA UPTOLW1 ADD AL , 20H UPTOLW1:POPF ;恢复各标志 RET UPTOLW ENDP; 2.利用约定存储单元传递参数 在传递参数较多的情况下,可利用约定的内存变量来传递参数。 例:写一个实现32位数相加的子程序 ;子程序名:MADD ;功能:32位数相加 ;入口参数:DATA1和DATA2缓冲区中分别存放要相加的数 ;出口参数:DATA3缓冲区存放结果 ;说明: ;(1)32位数据的存放次序采用“高高低低”原则 ;(2)可能产生的进位放在DATA3开始的第5字节中; MADD PROC PUSH AX ;为什么会把AX,CX,SI压入栈? PUSH CX PUSH SI MOV CX , 2 XOR SI , SI ;CF也会被清0 MADD1:MOV AX , WORD PTR DATA1[SI] ADC AX , WORD PTR DATA2[SI] MOV WORD PTR DATA3[SI] , AX INC SI INC SI POP SI LOOP MADD1 POP CX MOV AL , 0 POP AX ADC AL , 0 RET

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档