- 1、本文档共78页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《汇编语言》讲稿-10-call-和-ret-指令
第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) 没有完成此检测点,请不要向下进行。 10.5 转移地址在寄存器中的call指令 指令格式:call 1
您可能关注的文档
最近下载
- 2024至2030年中国电动车辆电机控制器行业市场运行状况及发展前景预测报告.docx
- 泵安装、操作和维护手册ASP Pump Manual CN_2018.08.08.pdf
- 电线电缆工艺质量常用参数计算.pptx
- 生物化学实验智慧树知到期末考试答案章节答案2024年浙江大学.docx
- 宁波市镇海天地液压有限公司行业竞争力评级分析报告(2023版).pdf
- 《GBT_20801.1-2020_压力管道规范_工业管道_第1部分_总则》.pdf
- 文艺演出活动安全保卫工作方案.pdf VIP
- 燃烧器低氮改造项目实施方案.docx VIP
- CJT 326-2010 市政排水用塑料检查井.docx
- 国家开放大学11680丨经济法(会计本)(统设课)期末考试复习题库.pdf
文档评论(0)