《汇编语言》讲稿_10.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《汇编语言》课件             王爽 著-清华大学出版社 第10章 call 和 ret 指令 10.1 ret 和 retf 10.2 call 指令 10.3 依据位移进行转移的call指令 10.4 转移的目的地址在指令中的call指令 10.5 转移地址在寄存器中的call指令 10.6 转移地址在内存中的call指令 10.7 call 和 ret 的配合使用 10.8 mul 指令 10.9 模块化程序设计 10.10 参数和结果传递的问题 10.11 批量数据的传递 10.12 寄存器冲突的问题 引言 call和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP。 它们经常被共同用来实现自程序的设计。 这一章,我们讲解call和ret 指令的原理。 10.1 ret 和 retf ret指令用栈中的数据,修改IP的内容,从而实现近转移; 操作 retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移; 操作 10.1 ret 和 retf CPU执行ret指令时,进行下面两步操作: (1)(IP)=((ss)*16+(sp)) (2)(sp)=(sp)+2 10.1 ret 和 retf CPU执行retf指令时,进行下面两步操作: (1)(IP)=((ss)*16+(sp)) (2)(sp)=(sp)+2 (3)(CS)=((ss)*16+(sp)) (4)(sp)=(sp)+2 10.1 ret 和 retf 可以看出,如果我们用汇编语法来解释ret和retf指令,则: CPU执行ret指令时,相当于进行: pop IP CPU执行retf指令时,相当于进行: pop IP pop CS 10.1 ret 和 retf 示例程序 ret指令 程序中ret指令执行后,(IP)=0,CS:IP指向代码段的第一条指令。 retf指令 程序中retf指令执行后,CS:IP指向代码段的第一条指令。 特别提示 检测点10.1(p179) 没有完成此检测点,请不要向下进行。 10.2 call 指令 CPU执行call指令,进行两步操作: (1)将当前的 IP 或 CS和IP 压入栈中; (2)转移。 call 指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同,下面的几个小节中 ,我们以给出转移目的地址的不同方法为主线,讲解call指令的主要应用格式。 10.3 依据位移进行转移的call指令 call 标号(将当前的 IP 压栈后,转到标号处执行指令) CPU执行此种格式的call指令时,进行如下的操作: (1) (sp) = (sp) – 2 ((ss)*16+(sp)) = (IP) (2) (IP) = (IP) + 16位位移 10.3 依据位移进行转移的call指令 call 标号 16位位移=“标号”处的地址-call指令后的第一个字节的地址; 16位位移的范围为 -32768~32767,用补码表示; 16位位移由编译程序在编译时算出。 演示 10.3 依据位移进行转移的call指令 从上面的描述中,可以看出,如果我们用汇编语法来解释此种格式的 call指令,则: CPU 执行指令“call 标号”时,相当于进行: push IP jmp near ptr 标号 特别提示 检测点10.2(p181) 没有完成此检测点,请不要向下进行。 10.4 转移的目的地址在指令中的call指令 前面讲解的call指令,其对应的机器指令中并没有转移的目的地址 ,而是相对于当前IP的转移位移。 指令“call far ptr 标号”实现的是段间转移。 操作 10.4 转移的目的地址在指令中的call指令 CPU执行“call far ptr 标号”这种格式的call指令时的操作: (1) (sp) = (sp) – 2 ((ss) ×16+(sp)) = (CS) (sp) = (sp) – 2 ((ss) ×16+(sp)) = (IP) (2) (CS) = 标号所在的段地址 (IP) = 标号所在的偏移地址 10.4 转移的目的地址在指令中的call指令 从上面的描述中可以看出,如果我们用汇编语法来解释此种格式的 call 指令,则: CPU 执行指令 “call far ptr 标号” 时,相当于进行: push CS push IP jmp far ptr 标号 特别提示 检测点10.3(p181) 没有完成此检测点,请不要向下进行。

文档评论(0)

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

1亿VIP精品文档

相关文档