第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章基本汇编语言程序设计子程序设计

4.4 子程序设计;;;模块化程序设计;1 子程序的定义;1 子程序的定义 ;1 子程序的定义;1 子程序的定义;1 子程序的定义;1 子程序的定义;1 子程序的定义;FAR型;1 子程序的定义;1 子程序的定义; main( ) {? float x, y, z; ??? x =123.23; ??? y= 99.09; ??? / * 函数调用* / z= sum (x,y) printf (“%f”,z); } / * 函数定义* / float sum (a,b ) float a,b; { ??? return a+b; };2 子程序的调用与返回 ;2 子程序的调用与返回; CX 操作 执行次数 4 ;初始 3 ;子程序中dec cx 2 ; LOOP (cx -1) 1 ;子程序中dec cx 0 ; LOOP (cx -1),结束 ;3 寄存器的保护与恢复;3 寄存器的保护与恢复;4 参数传递;4 参数传递;【例3 】 求校验和;把参数存于约定的寄存器中,可以传值,也可以传址。 子程序对带有出口参数的寄存器不能保护和恢复(主程序视具体情况进行保护) 子程序对带有入口参数的寄存器可以保护,也可以不保护;但最好一致 ;【例3-1 】 入口参数:CX=元素个数, DS:BX=数组的段地址:偏移地址 出口参数:AL=校验和;checksuma proc xor al,al ;累加器清0 suma: add al,[bx] ;求和 inc bx ;指向下一个字节 loop suma ret checksuma endp ;4.1 寄存器传递参数;4.1 寄存器传递参数;4.1 寄存器传递参数 ;4.2 约定存储单元传递参数 ;【例3-2】 入口参数: count=元素个数, array=数组名(段地址:偏移地址) 出口参数: sum=校验和;4.2 约定存储单元传递参数;4.3 用堆栈传递参数; .startup mov ax, offset array push ax mov ax,count push ax call checksumc add sp,4 mov result,al .exit 0;checksumc proc push bp mov bp,sp ;利用BP间接寻址存取参数 push bx push cx mov bx,[bp+6] ;SS:[BP+6]指向偏移地址 mov cx,[bp+4] ;SS:[BP+4]指向元素个数 xor al,al sumc: add al,[bx] inc bx loop sumc pop cx pop bx pop bp ret checksumc endp;堆栈区及参数;用寄存器传递参数:将参数送入约定的寄存器中, 用于参数较少的情况。 ;5 子程序的嵌套;ALdisp proc push ax push cx ;实现al内容的显示 push ax ;暂存ax mov cl,4 shr al,cl ;转换al的高4位 call htoasc ;子程序调用(嵌套) pop ax ;转换al的低4位 call htoasc ;子程序调用(嵌套) pop cx pop ax ret ALdisp endp;;将AL低4位表达的一位16进制数转换为ASCII码 HTOASC proc push ax push bx push dx mov bx,offset ASCII;BX指向ASCII码表 and al,0fh ;取得一位16进制数 xlat ASCII ;换码:AL←CS:[BX+AL],注意数据在代码段CS; mov dl,al ;显示 mov ah,2 int 21h pop dx pop bx pop ax ret ;子程序返回 ;子程序的数据区 ASCII db 30h,31h,32h,33h,34h,35h,36h,37h db 38h,39h,41h,42h,43h,44h,45h,46h HTOASC endp;子程序的递归;子程序的递归; .model small .stack 256 .data N dw 3 result dw ? .code .startup mov bx,N push bx ;入口参数:N call fact ;调用递归子程序 pop result ;出口参数:N! .exit 0;;计算N

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档