- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
010第十章Call和Ret指令概要
第十章 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 寄存器冲突的问题
引 言
想想程序之间的加载返回过程(cmd-debug)。
call和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现自程序的设计。这一章,我们讲解call和ret 指令的原理。
10.1 ret 和 retf
(一)ret指令用栈中的数据,修改IP的内容,从而实现近转移!
CPU执行ret指令时,进行下面两步操作:
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
(二)retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;
CPU执行retf指令时,进行下面两步操作:
(1)(IP)=((ss)*16+(sp))
(2)(sp)=(sp)+2
(3)(CS)=((ss)*16+(sp))
(4)(sp)=(sp)+2
可以看出,如果我们用汇编语法来解释ret和retf指令,则:
CPU执行ret指令时,相当于进行:pop IP
CPU执行retf指令时,相当于进行:
pop IP
pop CS
分析源码ret指令:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0
push ax
mov bx,0
ret ;pop值給ip
codesg ends
end start
程序中ret指令执行后,(IP)=0,CS:IP指向代码段的第一条指令。
retf指令:
assume cs:codesg
stack segment
db 16 dup (0)
stack ends
codesg segment
mov ax,4c00h
int 21h
start:
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0
push cs
push ax
mov bx,0
retf
codesg ends
end start
程序中retf指令执行后,CS:IP指向代码段的第一条指令。
检测点10.1
10.2 call 指令
call指令经常跟ret指令配合使用,因為CPU执行call指令,进行两步操作:
(1)将当前的 IP 或 CS和IP 压入栈中;
(2)转移(jmp)。
call 指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同。
下面的几个小节中 ,我们以给出转移目的地址的不同方法为主线,讲解call指令的主要应用格式。
10.3 依据位移进行转移的call指令
call 标号(将当前的 IP 压栈后,转到标号处执行指令)
CPU执行此种格式的call指令时,进行如下的操作:
(1) (sp) = (sp) – 2
((ss)*16+(sp)) = (IP)
(2) (IP) = (IP) + 16位位移
call 标号
16位位移=“标号”处的地址-call指令后的第一个字节的地址;
16位位移的范围为 -32768~32767,用补码表示;
16位位移由编译程序在编译时算出。
演示
从上面的描述中,可以看出,如果我们用汇编语法来解释此种格式的 call指令,则:
CPU 执行指令“call 标号”时,相当于进行:
push IP
jmp near ptr 标号
检测点10.2
10.4 转移的目的地址在指令中的call指令
前面讲解的call指令,其对应的机器指令中并没有转移的目的地址 ,而是相对于当前IP的转移位移。
指令“call far ptr 标号”实现的是段间转移。
CPU执行“call far ptr 标号”这种格式的call指令时的操作:
(1) (sp) = (sp) – 2
((ss) ×16+(sp)) = (CS)
(sp)
您可能关注的文档
最近下载
- 西门子 go topCT 中文版.pdf VIP
- 复合材料【全套课件】.ppt VIP
- 复合材料 第八章 先进复合材料.ppt VIP
- 人教版八年级物理第九单元《压强》测试题及答案.doc VIP
- 《复合材料学》全套教学课件.pptx
- 复合材料复合材料导论.ppt VIP
- 2025年闽教版(2024)小学英语四年级上册(全册)教学设计(附目录P123).docx
- 冠心病的介绍与治疗PPT.pptx VIP
- 2025云南昆明巫家坝建设发展有限责任公司及下属公司第三季度招聘23人笔试参考题库附答案解析.docx VIP
- 2.2.3 气候——特征和影响因素(课件)八年级地理上册(人教版).pptx VIP
文档评论(0)