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