第九章 转移指令原理01_第1页
第九章 转移指令原理01_第2页
第九章 转移指令原理01_第3页
第九章 转移指令原理01_第4页
第九章 转移指令原理01_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

零基础入门学习汇编语言

作者:小甲鱼第九章转移指令的原理目录9.1操作符offset9.2jmp指令9.3依据位移进行转移的jmp指令9.4转移的目的地址在指令中的jmp指令9.5转移地址在寄存器中的jmp指令9.6转移地址在内存中的jmp指令9.7jcxz指令9.8loop指令9.9根据位移进行转移的意义9.10编译器对转移位移超界的检测引言8086CPU的转移指令分为以下几类:无条件转移指令(如:jmp)条件转移指令循环指令(如:loop)过程中断9.1操作符offset操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。

比如下面的程序:assumecs:codesgcodesegsegmentstart:movax,offsetstart;相当于movax,0s:movax,offsets;相当于movax,3codesgendsendstart问题9.1有如下程序段,添写2条指令,使该程序在运行中将s处的一条指令复制到s0处。

assumecs:codesgcodesgsegments:movax,bx;(nop的机器码占一个字节)movsi,offsetsmovdi,offsets0____________________s0:nop;(nop的机器码占一个字节)nopcodesgendsends问题9.1分析(1)s和s0处的指令所在的内存单元的地址是多少?

cs:offsets和cs:offsets0。(2)将s处的指令复制到s0处,就是将cs:offeets处的数据复制到cs:offsets0处;(3)段地址已知在cs中,偏移地址offsets和offsets0已经送入si和di中;(4)要复制的数据有多长?movax,bx指令的长度为两个字节,即1个字。问题9.1完整程序assumecs:codesgcodesgsegments:movax,bx;(movax,bx的机器码占两个字节)movsi,offsetsmovdi,offsets0

movax,cs:[si]movcs:[di],axs0:nop;(nop的机器码占一个字节)nopcodesgendsends9.2jmp指令jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP;jmp指令要给出两种信息:转移的目的地址转移的距离(段间转移、段内短转移,段内近转移)9.3依据位移进行转移的jmp指令jmpshort标号(转到标号处执行指令)

这种格式的jmp指令实现的是段内短转移,它对IP的修改范围为-128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。9.3依据位移进行转移的jmp指令比如:程序9.1assumecs:codesgcodesgsegmentstart:movax,0

jmpshortsaddax,1

s:incaxcodesgendsendstart左面的程序执行后,ax中的值为1,因为执行jmpshorts后,越过了addax,1,IP指向了标号s处的incax。也就是说,程序只进行了一次ax加1操作。

9.3依据位移进行转移的jmp指令汇编指令jmpshorts对应的机器指令应该是什么样的呢?我们先看一下别的汇编指令和其对应的机器指令,(示例)现在我们在Debug中将程序9.1翻译成为机器码,看看结果汇编指令与机器码的对应示例

可以看到,在一般的汇编指令中,汇编指令中的idata(立即数),不论它是表示一个数据还是内存单元的偏移地址,都会在对应的机器指令中出现,因为CPU执行的是机器指令,它必须要处理这些数据或地址。9.3依据位移进行转移的jmp指令9.3依据位移进行转移的jmp指令对照汇编源程序!我们可以看到,Debug将jmpshorts中的s表示为incax指令的偏移地址8,并将jmpshorts表示为jmp0008,表示转移到cs:0008处。但是我们观察对应的机器码,却意外地发现了一些问题……9.3依据位移进行转移的jmp指令jmp0008(Debug中的表示)或jmpshorts(汇编语言中的表示)所对应的机器码为EB03,注意,这个机器码中竟不包含转移的目的地址。这意味着,CPU在执行EB03的时候,并不知道转移目的地址。9.3依据位移进行转移的jmp指令那么,CPU根据什么进行转移呢?没有了目的地址,CPU如何知道转移到哪里呢?我们做下小小的修改~9.3依据位移进行转移的jmp指令这说明在机器指令中并不包含转移的目的地址。如果机器指令中不包含目的地址的话,那么,也就是说CPU不需要这个目的地址就可以实现对IP的修改。小B可能会问:“老师,那么具体是如何修改的呢?”9.3依据位移进行转移的jmp指令jmpshorts指令的读取和执行过程:(1)(CS)=0BBDH,(IP)=0006,CS:IP指向EB03(jmpshorts的机器码);(2)读取指令码EB03进入指令缓冲器;(3)(IP)=(IP)+所读取指令的长度=(IP)+2=0008,CS:IP指向addax,1;(4)CPU指行指令缓冲器中的指令EB03;(5)指令EB03执行后,(IP)=000BH,CS:IP指向incax。9.3依据位移进行转移的jmp指令我们来看视频演示!9.3依据位移进行转移的jmp指令实际上,指令“jmpshort标号”的功能为(IP)=(IP)+8位位移。(1)8位位移=“标号”处的地址-jmp指令后的第一个字节的地址;(2)short指明此处的位移为8位位移;(3)8位位移的范围为-128~127,用补码表示

(如果你对补码还不了解,请阅读附注2)(4)8位位移由编译程序在编译时算出。9.3依据位移进行转移的jmp指令还有一种和指令“jmpshort标号”功能相近的指令格式:jmpnearptr标号它实现的时段内近转移。指令“jmpnearptr标号”的功能为:(IP)=(IP)+16位位移。jmpn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论