《汇编语言》讲稿10call和ret指令收集资料课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《汇编语言》讲稿10call和ret指令收集资料课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 讲稿 10 call ret 指令 收集 资料 课件
- 资源描述:
-
1、本课件由汇编网()制作提供第10章 call 和 ret 指令n10.1 ret 和 retfn10.2 call 指令n10.3 依据位移进行转移的call指令n10.4 转移的目的地址在指令中的call指令n10.5 转移地址在寄存器中的call指令n10.6 转移地址在内存中的call指令n10.7 call 和 ret 的配合使用n10.8 mul 指令n10.9 模块化程序设计n10.10 参数和结果传递的问题n10.11 批量数据的传递n10.12 寄存器冲突的问题本课件由汇编网()制作提供引言ncall和ret 指令都是转移指令,它们都修改IP,或同时修改CS和IP。n它们经常被
2、共同用来实现自程序的设计。n这一章,我们讲解call和ret 指令的原理。本课件由汇编网()制作提供10.1 ret 和 retfnret指令用栈中的数据,修改IP的内容,从而实现近转移;n操作nretf指令用栈中的数据,修改CS和IP的内容,从而实现远转移;n操作本课件由汇编网()制作提供10.1 ret 和 retfnCPU执行ret指令时,进行下面两步操作:n(1)(IP)=(ss)*16+(sp)n(2)(sp)=(sp)+2本课件由汇编网()制作提供10.1 ret 和 retfnCPU执行retf指令时,进行下面两步操作:n(1)(IP)=(ss)*16+(sp)n(2)(sp)=
3、(sp)+2n(3)(CS)=(ss)*16+(sp)n(4)(sp)=(sp)+2本课件由汇编网()制作提供10.1 ret 和 retfn可以看出,如果我们用汇编语法来解释ret和retf指令,则:nCPU执行ret指令时,相当于进行: pop IPnCPU执行retf指令时,相当于进行: pop IP pop CS本课件由汇编网()制作提供10.1 ret 和 retfn示例程序nret指令 程序中ret指令执行后,(IP)=0,CS:IP指向代码段的第一条指令。nretf指令 程序中retf指令执行后,CS:IP指向代码段的第一条指令。本课件由汇编网()制作提供特别提示n检测点10.1
4、(p179)n没有完成此检测点,请不要向下进行。本课件由汇编网()制作提供10.2 call 指令nCPU执行call指令,进行两步操作:n(1)将当前的 IP 或 CS和IP 压入栈中;n(2)转移。ncall 指令不能实现短转移,除此之外,call指令实现转移的方法和 jmp 指令的原理相同,下面的几个小节中 ,我们以给出转移目的地址的不同方法为主线,讲解call指令的主要应用格式。本课件由汇编网()制作提供10.3 依据位移进行转移的call指令ncall 标号(将当前的 IP 压栈后,转到标号处执行指令)nCPU执行此种格式的call指令时,进行如下的操作:n(1) (sp) = (s
5、p) 2 (ss)*16+(sp) = (IP)n(2) (IP) = (IP) + 16位位移本课件由汇编网()制作提供10.3 依据位移进行转移的call指令ncall 标号n16位位移=“标号”处的地址call指令后的第一个字节的地址;n16位位移的范围为 -3276832767,用补码表示;n16位位移由编译程序在编译时算出。n演示本课件由汇编网()制作提供本课件由汇编网()制作提供10.3 依据位移进行转移的call指令n从上面的描述中,可以看出,如果我们用汇编语法来解释此种格式的 call指令,则: CPU 执行指令“call 标号”时,相当于进行: push IP jmp nea
6、r ptr 标号 本课件由汇编网()制作提供特别提示n检测点10.2(p181)n没有完成此检测点,请不要向下进行。本课件由汇编网()制作提供10.4 转移的目的地址在指令中的call指令n前面讲解的call指令,其对应的机器指令中并没有转移的目的地址 ,而是相对于当前IP的转移位移。n指令“call far ptr 标号”实现的是段间转移。n操作本课件由汇编网()制作提供10.4 转移的目的地址在指令中的call指令nCPU执行“call far ptr 标号”这种格式的call指令时的操作:n(1) (sp) = (sp) 2 (ss) 16+(sp) = (CS) (sp) = (sp)
7、 2 (ss) 16+(sp) = (IP)n(2) (CS) = 标号所在的段地址 (IP) = 标号所在的偏移地址本课件由汇编网()制作提供10.4 转移的目的地址在指令中的call指令n从上面的描述中可以看出,如果我们用汇编语法来解释此种格式的 call 指令,则: CPU 执行指令 “call far ptr 标号” 时,相当于进行: push CS push IP jmp far ptr 标号本课件由汇编网()制作提供特别提示n检测点10.3(p181)n没有完成此检测点,请不要向下进行。本课件由汇编网()制作提供10.5 转移地址在寄存器中的call指令n指令格式:call 16位
8、寄存器n功能:n(sp) = (sp) 2n(ss)*16+(sp) = (IP)n(IP) = (16位寄存器) 本课件由汇编网()制作提供10.5 转移地址在寄存器中的call指令n指令格式:call 16位寄存器n汇编语法解释此种格式的 call 指令,CPU执行call 16位reg时,相当于进行: push IP jmp 16位寄存器本课件由汇编网()制作提供特别提示n检测点10.4(p182)n没有完成此检测点,请不要向下进行。本课件由汇编网()制作提供10.6 转移地址在内存中的call指令n转移地址在内存中的call指令有两种格式:n(1) call word ptr 内存单元
9、地址n (2) call dword ptr 内存单元地址本课件由汇编网()制作提供10.6 转移地址在内存中的call指令n(1) call word ptr 内存单元地址n汇编语法解释: push IP jmp word ptr 内存单元地址n示例本课件由汇编网()制作提供10.6 转移地址在内存中的call指令n(1) call word ptr 内存单元地址(示例)n比如下面的指令: mov sp,10h mov ax,0123h mov ds:0,ax call word ptr ds:0执行后,(IP)=0123H,(sp)=0EH本课件由汇编网()制作提供10.6 转移地址在内存
10、中的call指令n(2) call dword ptr 内存单元地址n汇编语法解释: push CS push IP jmp dword ptr 内存单元地址n示例本课件由汇编网()制作提供10.6 转移地址在内存中的call指令n(2) call dword ptr 内存单元地址(示例)n 比如,下面的指令: 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本课件由汇编网()制作提供特别提示n检测点10.5(p183)n没有完成此
11、检测点,请不要向下进行。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n前面,我们已经分别学习了 ret 和call指令的原理。现在我们看一下,如何将它们配合使用来实现子程序的机制。n问题10.1本课件由汇编网()制作提供10.7 call 和 ret 的配合使用assume cs:codecode segmentstart: mov ax,1 mov cx,3 call s mov bx,ax;(bx) = ? mov ax,4c00h int 21h s: add ax,ax loop s retcode endsend startn问题10.1 右面程序返回前,bx
12、中的值是多少? 思考后看分析。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n问题10.1分析 我们来看一下 CPU 执行这个程序的主要过程:n(1)CPU 将call s指令的机器码读入,IP指向了call s后的指令mov bx,ax,然后CPU执行call s指令,将当前的 IP值(指令mov bx,ax的偏移地址)压栈,并将 IP 的值改变为标号 s处的偏移地址;n(2)CPU从标号 s 处开始执行指令,loop循环完毕,(ax)=8;本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n问题10.1分析(续) 我们来看一下CPU执行这个程序的主要
13、过程:n(3)CPU将ret指令的机器码读入,IP指向了ret 指令后的内存单元,然后CPU 执行 ret 指令 ,从栈中弹出一个值(即 call 先前压入的mov bx,ax 指令的偏移地址)送入 IP 中。则CS:IP指向指令mov bx,ax;n(4)CPU从 mov bx,ax 开始执行指令,直至完成。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n问题10.1分析(续) 程序返回前,(bx)=8 。我们可以看出,从标号s 到ret的程序段的作用是计算2的N次方,计算前,N的值由CX提供。n我们再来看下面的程序本课件由汇编网()制作提供10.7 call 和 re
14、t 的配合使用本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n我们看一下程序的主要执行过程:n(1)前三条指令执行后,栈的情况如下:本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n程序的主要执行过程:n(2)call 指令读入后,(IP) =000EH,CPU指令缓冲器中的代码为 B8 05 00; CPU执行B8 05 00,首先,栈中的情况变为: 然后,(IP)=(IP)+0005=0013H。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n程序的主要执行过程:n(3)CPU从cs:0013H处(即标号s处)开始执行。n(4
15、)ret指令读入后:(IP)=0016H,CPU指令缓冲器中的代码为 C3;CPU执行C3,相当于进行pop IP,执行后,栈中的情况为: (IP)=000EH;本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n程序的主要执行过程:n(5)CPU回到 cs:000EH处(即call指令后面的指令处)继续执行。n从上面的讨论中我们发现,可以写一个具有一定功能的程序段,我们称其为子程序,在需要的时候,用call指令转去执行。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n可是执行完子程序后,如何让CPU接着call指令向下执行?ncall指令转去执行子程序
16、之前,call指令后面的指令的地址将存储在栈中,所以可以在子程序的后面使用 ret 指令,用栈中的数据设置IP的值,从而转到 call 指令后面的代码处继续执行。本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n这样,我们可以利用call和ret来实现子程序的机制。n子程序的框架本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n子程序的框架: 标号: 指令 retn具有子程序的源程序的框架:本课件由汇编网()制作提供10.7 call 和 ret 的配合使用n现在,可以从子程序的角度,回过头来再看一下本节中的两个程序。本课件由汇编网()制作提供10.8
展开阅读全文