《汇编语言》讲稿_10.pptVIP

  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文档。上传文档
查看更多
10.6 转移地址在内存中的call指令 (1) call word ptr 内存单元地址(示例) 比如下面的指令: mov sp,10h mov ax,0123h mov ds:[0],ax call word ptr ds:[0] 执行后,(IP)=0123H,(sp)=0EH 10.6 转移地址在内存中的call指令 (2) call dword ptr 内存单元地址 汇编语法解释: push CS push IP jmp dword ptr 内存单元地址 示例 10.6 转移地址在内存中的call指令 (2) call dword ptr 内存单元地址(示例) 比如,下面的指令: mov sp,10h mov ax,0123h mov ds:[0],ax mov word ptr ds:[2],0 call dword ptr ds:[0] 执行后,(CS)=0,(IP)=0123H,(sp)=0CH 特别提示 检测点10.5(p183) 没有完成此检测点,请不要向下进行。 10.7 call 和 ret 的配合使用 前面,我们已经分别学习了 ret 和call指令的原理。现在我们看一下,如何将它们配合使用来实现子程序的机制。 问题10.1 10.7 call 和 ret 的配合使用 assume cs:code code segment start: mov ax,1 mov cx,3 call s mov bx,ax ;(bx) = ? mov ax,4c00h int 21h s: add ax,ax loop s ret code ends end start 问题10.1 右面程序返回前,bx中的值是多少? 思考后看分析。 10.7 call 和 ret 的配合使用 问题10.1分析 我们来看一下 CPU 执行这个程序的主要过程: (1)CPU 将call s指令的机器码读入,IP指向了call s后的指令mov bx,ax,然后CPU执行call s指令,将当前的 IP值(指令mov bx,ax的偏移地址)压栈,并将 IP 的值改变为标号 s处的偏移地址; (2)CPU从标号 s 处开始执行指令,loop循环完毕,(ax)=8; 10.7 call 和 ret 的配合使用 问题10.1分析(续) 我们来看一下CPU执行这个程序的主要过程: (3)CPU将ret指令的机器码读入,IP指向了ret 指令后的内存单元,然后CPU 执行 ret 指令 ,从栈中弹出一个值(即 call 先前压入的mov bx,ax 指令的偏移地址)送入 IP 中。则CS:IP指向指令mov bx,ax; (4)CPU从 mov bx,ax 开始执行指令,直至完成。 10.7 call 和 ret 的配合使用 问题10.1分析(续) 程序返回前,(bx)=8 。我们可以看出,从标号s 到ret的程序段的作用是计算2的N次方,计算前,N的值由CX提供。 我们再来看下面的程序 10.7 call 和 ret 的配合使用 10.7 call 和 ret 的配合使用 我们看一下程序的主要执行过程: (1)前三条指令执行后,栈的情况如下: 10.7 call 和 ret 的配合使用 程序的主要执行过程: (2)call 指令读入后,(IP) =000EH,CPU指令缓冲器中的代码为 B8 05 00; CPU执行B8 05 00,首先,栈中的情况变为: 然后,(IP)=(IP)+0005=0013H。 10.7 call 和 ret 的配合使用 程序的主要执行过程: (3)CPU从cs:0013H处(即标号s处)开始执行。 (4)ret指令读入后:(IP)=0016H,CPU指令缓冲器中的代码为 C3;CPU执行C3,相当于进行pop IP,执行后,栈中的情况为: (IP)=000EH; 10.7 call 和 ret 的配合使用 程序的主要执行过程: (5)CPU回到 cs:000EH处(即call指令后面的指令处)继续执行。 从上面的讨论中我们发现,可以写一个具有一定功能的程序段,我们称其为子程序,在需要的时候,用call指令转去执行。 10.7 call 和 ret 的配合使用 可是执行完子程序后,如何让CPU接着call指令向下执行? call指令转去执行子程序之前,call指令后面的指令的地址将存储在栈中,所以可以在子程序的后面使用 ret 指令,用栈中的数据设

文档评论(0)

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

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

1亿VIP精品文档

相关文档