收藏 分销(赏)

jmp指令详解PPT学习课件.ppt

上传人:a199****6536 文档编号:10503208 上传时间:2025-05-31 格式:PPT 页数:40 大小:326.50KB 下载积分:12 金币
下载 相关 举报
jmp指令详解PPT学习课件.ppt_第1页
第1页 / 共40页
jmp指令详解PPT学习课件.ppt_第2页
第2页 / 共40页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,本课件由汇编网(,)制作提供,jmp,指令,jmp,为无条件转移,可以只修改,IP,,也可以同时修改,CS,和,IP,;,jmp,指令要给出两种信息:,转移的目的地址,转移的距离(段间转移、段内短转移,段内近转移),1,、依据位移进行转移的,jmp,指令,jmp short,标号(转到标号处执行指令),这种格式的,jmp,指令实现的是段内短转移,它对,IP,的修改范围为,-128127,,也就是说,它向前转移时可以最多越过,128,个字节,向后转移可以最多越过,127,个字节。,比如:程序,9.1,assume cs:codesg,codesg segment,start:mov ax,0,jmp short s,add ax,1,s:,inc ax,codesg ends,end start,左面的程序执行后,,ax,中的值为,1,,因为执行,jmp short s,后,越过了,add ax,1,,,IP,指向了标号,s,处的,inc ax,。也就是说,程序只进行了一次,ax,加,1,操作。,1,、依据位移进行转移的,jmp,指令,汇编指令,jmp short s,对应的机器指令应该是什么样的呢?,我们先看一下别的汇编指令和其对应的机器指令。,1,、依据位移进行转移的,jmp,指令,汇编指令与机器码的对应示例,可以看到,在一般的汇编指令中,汇编指令中的,idata,(立即数),不论它是表示一个数据还是内存单元的偏移地址,都会在对应的机器指令中出现,因为,CPU,执行的是机器指令,它必须要处理这些数据或地址。,1,、依据位移进行转移的,jmp,指令,对照汇编源程序,我们可以看到,,Debug,将,jmp short s,中的,s,表示为,inc ax,指令的偏移地址,8,,并将,jmp short s,表示为,jmp 0008,,表示转移到,cs:0008,处。,下面现在我们在,Debug,中将程序,9.1,翻译成为机器码,,看看结果:,1,、依据位移进行转移的,jmp,指令,这一切似乎合理,可是当我们查看,jmp short s,或,jmp 0008,所对应的机器码,却发现了问题。,1,、依据位移进行转移的,jmp,指令,jmp 0008,(,Debug,中的表示)或,jmp short s,(汇编语言中的表示)所对应的机器码为,EB 03,,注意,这个机器码中竟不包含转移的目的地址。,这意味着,,CPU,在执行,EB 03,的时候,并不知道转移目的地址。,1,、依据位移进行转移的,jmp,指令,那么,,CPU,根据什么进行转移呢?,没有了目的地址,,CPU,如何知道转移到哪里呢?,1,、依据位移进行转移的,jmp,指令,令人奇怪的是,汇编指令,jmp short s,中,明明是带有转移的目的地址(由标号,s,表示)的,可翻译成机器指令后,怎么目的地址就没了呢?,1,、依据位移进行转移的,jmp,指令,没有了目的地址,,CPU,如何知道转移到哪里?,我们把程序,9.1,改写一下,变成这样:,程序,9.2,1,、依据位移进行转移的,jmp,指令,程序,9.2,assume cs:codesg,codesg segment,start:mov ax,0,mov bx,0,jmp short s,add ax,1,s:inc ax,codesg ends,end start,我们在,Debug,中将程序,9.2,翻译为机器码,看看结果,1,、依据位移进行转移的,jmp,指令,比较一下程序,1,和,2,用,Debug,查看的结果,1,、依据位移进行转移的,jmp,指令,注意,两个程序中的,jmp,指令都要使,IP,指向,inc ax,指令,但是程序,1,的,inc ax,指令的偏移地址为,0008,,而程序,2,的,inc ax,指令的偏移地址为,000BH,。,我们再来看两个程序中的,jmp,指令所对应的机器码,都是,EB 03,。,1,、依据位移进行转移的,jmp,指令,这说明,CPU,在指令,jmp,指令的时候并不需要转移的目的地址。,两个程序中的,jmp,指令的转移目的地址并不一样,一个是,cs:0008,,另一个是,cs:000B,。,如果机器指令中包含了转移的目的地址的话,那么它们对应的机器码应该是不同的。,1,、依据位移进行转移的,jmp,指令,可是它们对应的机器码都是,EB 03,,这说明在机器指令中并不包含转移,的目的地址。,如果机器指令中不包含目的地址的话,那么,也就是说,CPU,不需要这个目的地址就可以实现对,IP,的修改。,1,、依据位移进行转移的,jmp,指令,这种信息是什么呢?,我们一步步地分析。,我们先简单回忆一下,CPU,执行指令的过程:,1,、依据位移进行转移的,jmp,指令,CPU,执行指令的过程:,(,1,)从,CS:IP,指向内存单元读取指令,读取的指令进入指令缓冲区;,(,2,),(IP)=(IP)+,所读取指令的长度,从而指向下一条指令;,(,3,)执行指令。转到,1,,重复这个过程。,1,、依据位移进行转移的,jmp,指令,按照这个步骤,我们参照程序,9.2,的图看一下:,jmp short s,指令的读取和执行过程,1,、依据位移进行转移的,jmp,指令,jmp short s,指令的读取和执行过程:,(,1,),(CS)=0BBDH,,,(IP)=0006,,,CS:IP,指向,EB 03,(,jmp short s,的机器码);,(,2,)读取指令码,EB 03,进入指令缓冲器;,(,3,),(IP)=(IP)+,所读取指令的长度,=(IP)+2=0008,,,CS:IP,指向,add ax,1,;,(,4,),CPU,指行指令缓冲器中的指令,EB 03,;,(,5,)指令,EB 03,执行后,,(IP)=000BH,,,CS:IP,指向,inc ax,。,1,、依据位移进行转移的,jmp,指令,从上面的过程中我们看到,,CPU,将指令,EB 03,读入后,,IP,指向了下一条指令,即,CS:0008,处的,add ax,1,,接着执行,EB 03,。,如果,EB 03,没有对,IP,进行修改的话,那么,接下来,CPU,将执行,add ax,1,。,1,、依据位移进行转移的,jmp,指令,可是,,CPU,执行的,EB 03,确是一条修改,IP,的转移指令,执行后,(IP)=000BH,,,CS:IP,指向,inc ax,,,CS:0008,处的,add ax,1,没有被执行。,CPU,在执行,EB 03,的时候是根据什么修改的,IP,,使其指向目标指令呢?就是根据指令码中的,03,。,1,、依据位移进行转移的,jmp,指令,注意,要转移的目的地址是,CS:000B,,而,CPU,执行,EB 03,时,当前的,(IP)=0008,,如果将当前的,IP,值加,3,,使,(IP)=000BH,,,CS:IP,就可以指向目标指令。,在转移指令,EB 03,中并没有告诉,CPU,要转移的目的地址,却告诉了,CPU,要转移的位移,即将当前的,IP,向后移动,3,个字节。,1,、依据位移进行转移的,jmp,指令,因为程序,1,、,2,中的,jmp,指令转移的位移相同,都是向后,3,个字节,所以它们的机器码都是,EB 03,。,原来如此,在,“,jmp short,标号,”,指令所对应的机器码中,并不包含转移的目的地址,而包含的是转移的位移。,这个位移,使编译器根据汇编指令中的,“,标号,”,计算出来的,,1,、依据位移进行转移的,jmp,指令,转移位移具体的计算方法如下图,:,1,、依据位移进行转移的,jmp,指令,结论:,CPU,执行,jmp short,标号 指令时并不需要转移的目的地址,只需要知道转移的位移就行了。,1,、依据位移进行转移的,jmp,指令,实际上,指令,“,jmp short,标号,”,的功能为,(IP)=(IP)+8,位位移。,(,1,),8,位位移,=,“,标号,”,处的地址,-jmp,指令后的第一个字节的地址;,(,2,),short,指明此处的位移为,8,位位移;,(,3,),8,位位移的范围为,-128127,,用补码表示,(如果你对补码还不了解,请阅读附注,2,),(,4,),8,位位移由编译程序在编译时算出。,1,、依据位移进行转移的,jmp,指令,还有一种和指令,“,jmp short,标号,”,功能相近的指令格式:,jmp near ptr,标号,它实现的时段内近转移。,指令,“,jmp near ptr,标号,”,的功能为:,(IP)=(IP)+16,位位移。,1,、依据位移进行转移的,jmp,指令,指令,“,jmp near ptr,标号,”,的说明:,(,1,),16,位位移,=,“,标号,”,处的地址,-jmp,指令后的第一个字节的地址;,(,2,),near ptr,指明此处的位移为,16,位位移,进行的是段内近转移;,(,3,),16,位位移的范围为,-3276932767,,用补码表示;,(,4,),16,位位移由编译程序在编译时算出。,1,、依据位移进行转移的,jmp,指令,2,、转移的目的地址在指令中的,jmp,指令,前面讲的,jmp,指令,其对应的机器码中并没有转移的目的地址,而是相对于当前,IP,的转移位移。,指令,“,jmp far ptr,标号,”,实现的是段间转移,又称为远转移。,指令,“,jmp far ptr,标号,”,功能如下:,(CS)=,标号所在段的段地址;,(IP)=,标号所在段中的偏移地址。,far ptr,指明了指令用标号的段地址和偏移地址修改,CS,和,IP,。,我们看下面的程序,2,、转移的目的地址在指令中的,jmp,指令,程序,9.3,:,assume cs:codesg,codesg segment,start:mov ax,0,mov bx,0,jmp far ptr s,db 256 dup(0),s:add ax,1,inc ax,codesg ends,end start,2,、转移的目的地址在指令中的,jmp,指令,我们在,Debug,中将程序,9.3,翻译成为机器码,看到的结果如图:,2,、转移的目的地址在指令中的,jmp,指令,如图中所示:,源程序中的,db 256 dup(0),,被,Debug,解释为相应的若干条汇编指令。这不是关键,关键是,我们要注意一下,jmp far ptr s,所对应的机器码:,EA 0B 01 BD 0B,,其中包含转移的目的地址。,2,、转移的目的地址在指令中的,jmp,指令,“,0B 01 BD 0B,”,是目的地址在指令中的存储顺序,高地址的,“,BD 0B,”,是转移的段地址:,0BBDH,,低地址的,“,0B 01,”,是偏移地址:,010BH,。,2,、转移的目的地址在指令中的,jmp,指令,3,、转移地址在寄存器中的,jmp,指令,指令格式:,jmp 16,位寄存器,功能:,IP=,(,16,位寄存器),这种指令我们在前面的课程(参见,2.11,节)中已经讲过,这里就不再详述。,转移地址在内存中的,jmp,指令有两种格式:,(,1,),jmp word ptr,内存单元地址(段内转移),功能:从内存单元地址处开始存放着一个字,是转移的目的偏移地址。,内存单元地址可用寻址方式的任一格式给出。,示例,4,、转移地址在内存中的,jmp,指令,(,1,),jmp word ptr,内存单元地址(段内转移),示例:,mov ax,0123H,mov bx,ax,jmp word ptr bx,执行后,,(IP)=0123H,mov ax,0123H,mov ds:0,ax,jmp word ptr ds:0,执行后,,(IP)=0123H,4,、转移地址在内存中的,jmp,指令,转移地址在内存中的,jmp,指令的第二种格式:,(,2,),jmp dword ptr,内存单元地址(段间转移),功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。,(CS)=(,内存单元地址,+2),(IP)=(,内存单元地址,),内存单元地址可用寻址方式的任一格式给出。,示例,4,、转移地址在内存中的,jmp,指令,(,2,),jmp dword ptr,内存单元地址(段间转移),示例:,mov ax,0123H,mov bx,ax,mov word ptr bx+2,0,jmp dword ptr bx,执行后,,(CS)=0,(IP)=0123H,CS:IP,指向,0000,:,0123,。,mov ax,0123H,mov ds:0,ax,mov word ptr ds:2,0,jmp dword ptr ds:0,执行后,,(CS)=0,(IP)=0123H,CS:IP,指向,0000,:,0123,。,4,、转移地址在内存中的,jmp,指令,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服