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

下载本文档

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

文档简介

寻址方式:立即数寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址第九章转移指令的原理转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。转移指令就是可以控制CPU执行内存中某处代码的指令。转移指令段内转移:只修改IP,例如jmpax短转移:修改IP的范围为-128~127近转移:修改IP的范围为-32768~32767段间转移:同时修改CS和IP,例如jmp1000:0转移指令无条件转移指令条件转移指令循环指令过程中断9.1操作符offsetoffset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址。问题9.19.2jmp指令无条件转移指令它指出两种信息:转移的目的地址转移的距离9.3依据位移进行转移的jmp指令

jmpshort标号段内短转移,它对IP的修改范围是-128~127。也就是说,它向前转移时可以最多越过128个字节,向后转移时最多越过127个字节。标号:指代码段中的标号,指明了指令要转移的目的地,转移指令执行后,CS:IP指向标号处的指令理解jmpshort标号的机器码jmpshort标号的功能是:

(IP)=(IP)+8位位移(1)8位位移=“标号”处的地址-jmp指令后的第一个字节的地址(2)short指明此处的位移为8位位移(3)8位位移的范围为-128~127,用补码表示(4)8位位移由编译程序在编译时算出。依据位移进行转移的jmp指令

jmpnearptr标号jmpnearptr标号的功能是:

(IP)=(IP)+16位位移(1)16位位移=“标号”处的地址-jmp指令后的第一个字节的地址(2)near指明此处的位移为16位位移(3)16位位移的范围为-32768~32767,用补码表示(4)16位位移由编译程序在编译时算出。依据位移进行转移的jmp指令

jmpshort标号段内短转移

jmpnearptr标号段内近转移9.4转移的目的地址在指令中的jmp指令

jmpfarptr标号在该类指令的机器码中包含了标号所在段的段地址和标号在段中的偏移地址9.5转移地址在寄存器中的jmp指令

jmp16位寄存器功能:(IP)=(16位寄存器)9.6转移地址在内存中的jmp指令jmpwordptr内存单元地址段内近转移jmpdwordptr内存单元地址段间转移从内存单元地址处开始存放两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址。检测点9.1(1)assumecs;codedatasegment?dataendscodesegmentstart:movax,data movds,axmovbx,0jmpwordptr[bx+1]codeendsendstart检测点9.1(2)assumecs:codedatasegment

dd12345678hdataendscodesegmentstart:movax,datamovds,ax movbx,0mov[bx],____

mov[bx+2],____jmpdwordptrds:[0]codeends endstart检测点9.1(3)2000:1000BE00060000

00

00…movax,2000hmoves,axjmpdwordptres:[1000h](CS)=?,(IP)=?9.7jcxz指令条件转移指令所有的条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围为:-128~127jcxz指令

jczx

标号操作:当(CX)=0时,(IP)=(IP)+8位位移当(CX)≠0时,程序执行下一条指令检测点9.2assumecs:codecodesegmentstart: movax,2000h movds,ax movbx,0s:___________ ___________ ___________ ___________

jmpshortsok:movdx,bx movax,4c00h

int21hcodeends endstart9.8LOOP指令LOOP指令是循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围是-128~127。LOOP指令

LOOP标号操作:1、(CX)=(CX)–12、如果(CX)≠0,(IP)=(IP)+8位位移(1)8位位移=“标号”处的地址-LOOP指令后的第一个字节的地址(2)8位位移的范围为-128~127,用补码表示(3)8位位移由编译程序在编译时算出。检测点9.3assumecs:codecodesegmentstart: movax,2000h movds,ax movbx,0 s: mov

cl,[bx] movch,0 __________ incbx loops ok: dec

bx movdx,bx

movax,4c00h

int21hcodeends endstart9.9根据位移进行转移的意义方便程序段在内存中的浮动装配9.10编译器对转移位移超界的检测jmpshort标号jmpnear标号loop标号jczx

标号实验8assumecs:codesgcodesgsegment movax,4c00h

int21hstart: movax,0 s:nop nop movdi,offsets movsi,offsets2 movax,cs:[si] movcs:[di],ax s0:jmpsho

温馨提示

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

评论

0/150

提交评论