网站大量收购独家精品文档,联系QQ:2885784924

微机原理与应用.pptxVIP

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多

子程序调用指令CALLCALL指令用在主程序中,实现子程序的调用分成段内调用(近调用)和段间调用(远调用)目标地址采用相对寻址、直接寻址或间接寻址入栈返回地址:将CALL下一条指令的地址压入堆栈16位段段内:16位偏移地址,段间:再加16位段地址32位段段内:32位偏移地址,段间:再将16位段选择器零位扩展为32位保存到堆栈

2;调用标号指定的子程序3CALLreg16/reg32 1CALLlabel6;调用存储单元指定地址的子程序5CALLmem16/mem324;调用寄存器指定地址的子程序

RET指令用在子程序结束,实现返回主程序RET;无参数返回:出栈返回地址RETi16;有参数返回:出栈返回地址,ESP←ESP+i16子程序返回指令RET

过程定义伪指令获得子程序信息过程名 PROC…… ;过程体过程名 ENDP;过程名为符合语法的标识符PROC后面可加参数:NEAR或FAR过程定义

CSEGSEGMENTASSUMECS:CSEGSTART:….CALLSUBT….MOVAH,4CHINT21HSUBTPROC(NEAR)….RETSUBTENDPCSEGENDSENDSTART

利用过程定义,获得子程序名和调用属性01RET指令返回主程序,CALL指令调用子程序02压入和弹出操作要成对使用,保持堆栈平衡03开始保护寄存器,返回前相应恢复04安排在代码段的主程序之外05子程序允许嵌套和递归06可共用一个数据段,也可具有独立数据段07子程序设计

子程序的参数传递主程序与子程序间通过参数传递建立联系入口参数(输入参数):主程序→子程序出口参数(输出参数):子程序→主程序传递参数的多少反映程序模块间的耦合程度参数的具体内容数据本身(传递数值)数据的存储地址(传递地址,传递引用)参数传递方法:寄存器、变量或堆栈

最简单和常用的参数传递方法把参数存于约定的寄存器少量数据直接传递数值大量数据只能传递地址带有出口参数的寄存器不保护123带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一致4寄存器传递参数(例5-16)

[例题5-16]字符串显示程序-1 ;数据段msg dbWell,Imadeit!,0 ;代码段(主程序) movsi,offsetmsg ;主程序提供显示字符串 calldpstri ;调用子程序movah,4chint21h子程序名DPSTRI入口参数DS:SI=字符串首地址功能说明显示字符串(以0结尾)寄存器地址参数传递

[例题5-16]字符串显示程序-2 ;代码段(子程序)dpstri proc ;子程序:显示字符串 pushax;寄存器保护dps1: moval,[si] ;取显示字符 cmpal,0 ;是结尾,则显示结束 jzdps2 calldpchar ;调用字符显示子程序 incsi jmpdps1dps2: popax;寄存器恢复 retdpstri endp子程序名DPCHAR入口参数AL=ASCII码功能说明显示字符寄存器数值参数传递

[例题5-16]字符串显示程序-3dpchar proc ;子程序显示字符 pushax ;顺序入栈,保护寄存器 pushdx movah,2 movdl,al ;显示一个字符 int21h popdx ;逆序出栈,恢复寄存器 popax retdpchar endp子程序名DPCHAR入口参数AL=ASCII码功能说明显示字符

1子程序和主程序使用同一个变量名存取数据2变量定义和使用不在同一个源程序中,需要利用PUBLIC、EXTREN声明4特别适合在多个程序段间、尤其在不同的程序模块间传递数据3共享变量传递参数,子程序的通用性较差共享变量传递参数

算法如下:首先判断数据是零、正数或负数,是零显示“0”退出;是负数,显示“-”,求数据的绝对值;接着数据除以10,余数加30H转换为ASCII码压入堆栈;重复第3步,直到商为0结束;依次从堆栈弹出各位数字,进行显示[例题5-19]有符号十进制数输出程序-1

[例题5-19]有符号十进制数输出程序-2 movecx,count movebx,0again: moveax,array[e

文档评论(0)

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

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

1亿VIP精品文档

相关文档