[汇编语言(第二版)][王爽 著][课件]第9章 转移指令的原理_第1页
[汇编语言(第二版)][王爽 著][课件]第9章 转移指令的原理_第2页
[汇编语言(第二版)][王爽 著][课件]第9章 转移指令的原理_第3页
[汇编语言(第二版)][王爽 著][课件]第9章 转移指令的原理_第4页
[汇编语言(第二版)][王爽 著][课件]第9章 转移指令的原理_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言课件,王爽着-清华大学出版社,制作工具: MicrosoftPowerPoint2003,本课件由汇编器()制作并提供, 第9章迁移命令的原理9.1操作员offset 9.2基于jmp命令9.3移位的跳跃的jmp命令9.4移位目的地地址是命令中的jmp命令9.5移位目的地地址是寄存器中的jmp命令9.6移位目的地地址是存储器中的jmp命令9.7jcxz命令9.8loop命令9. 含义9.10检测到编译器的跳跃移位超限,引言8086CPU的传输指令,无条件传输指令(例如,jmp )条件传输指令环路指令(例如,loop )过程被中断,9.1运算符offset,运算符offset以汇编语言编译例如assumer cs : codesgcodesegmentstart : movax,offsetstart; 与movax,0s:movax,offsetets相当的movax,3codesgendsendstart,9.1操作员offs 思考分析。assume cs : codesgcodesgsgsgsgsgsgsgments : movax,bx; (nop的机器代码为一个字节) movsi,offsetsmovdi,offsets0_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ s 0: nop; 包含nop机器代码占1字节的nopcodesgendsends、9.1操作员offset、问题9.1分析(1)s和s0中的命令的存储单元地址是多少? cs:offsets和cs:offsets0。 (2)将s处的指令复制到s0意味着将cs:offeets处的数据复制到cs:offsets0,其中cs已知9.1运算符offset,问题9.1分析(续) (3)段地址是已知的,并且偏移地址是已知的movax、bx指令的长度为2个字节,即1个字。 完整步骤,9.1运算符offset,assume cs : codesgcodesgsgsgsgsgsgsgsgsn : movax,bx; movsi,offsetsmovdi,offsets0movax,cs:simovcs:di,axs0:nop; (nop机器代码占1字节) nopcodesgendsends,问题9.1完整程序:9.2jmp指令,jmp是无条件转移,可以只变更IP,也可以同时变更CS和IP的jmp指令,也可以变更目的地地址转移的距离(sess 段内短转移、段内短转移)、基于9.3位移转移的jmp命令、jmp短标签(移至标签执行命令)这种格式的jmp命令实现的段内短转移,IP的变更范围为-128127 根据9.3位移转换的jmp命令,例如程序9.1 assume cs : codesgcodesgsgmentstart : movax、0jmpshortsaddax、1s : incaxcodesgendsends 也就是说,程序只进行了一次ax 1操作。 9.3根据位移移动的jmp指令、支持装配指令jmpshorts的机器指令是什么样的呢? 首先,我们来看看另一个汇编指令及其对应的机器指令。 (例)现在,用Debug把程序9.1翻译成机器代码,看看结果。 让我们来看一下根据位移迁移的jmp指令、汇编指令和机器代码的对应示例。 在典型的汇编指令中,汇编指令的idata (即时)出现在相应的机器指令中,无论它表示数据还是存储单元的偏移地址。 因为CPU正在执行机器指令,所以必须处理这些数据和地址。 如果对照根据9.3位移而迁移的jmp命令、汇编源,则Debug表示jmpshortts中的s为incax命令的偏移地址8,将jmpshortts表示为jmp0008,表示迁移到cs:0008。 9.3位移引起的jmp命令看起来很合理,但看了jmpshorts和jmp0008对应的机器代码,发现了问题。 请注意,9.3通过移位进行跳转的jmp命令、jmp 0008 (以debug表示)或jmpshorts (以汇编语言表示)对应的机器代码为EB03,该机器代码不包含跳转目标地址。这意味着当CPU执行EB03时,不知道转送目的地地址。 9.3根据位移转移的jmp指令中,CPU是根据什么进行转移的呢? 虽然没有目的地地址,CPU却能知道如何迁移到哪里? 9.3因位移而转移的jmp命令奇怪的是,在装配命令jmpshorts中,虽然有转移目的地的地址(用符号s表示),但如果能翻译成机器命令的话,怎么会没有目的地址呢?是根据9.3位移而转移的jmp命令改写程序9.1后,程序9.2、9.3根据位移转移的jmp命令,程序9.2 assume cs : codesgsgsgsgsgmentstart : movax,0movbx, 0 jmpshortsaddax 1s : incaxcodesgendsendstar 注意,虽然两个程序的jmp命令的IP都指示incax命令,但是程序1的incax命令的偏移地址是0008,而程序2的incax命令的偏移地址是000BH。 看看与两个程序的jmp指令对应的机器代码。 全部都是EB03。 根据9.3位移而迁移的jmp指令,表示CPU指令jmp指令时不需要迁移目的地地址。 两个程序的jmp指令的转发地址不同,一个是cs :0000,另一个是cs:000B。 如果机器指令包含目的地地址,对应的机器代码应该不同。 虽然是根据9.3位移进行跳跃的jmp命令,但与其对应的机器代码都是EB03,表示跳跃目标地址不包含在机器命令中。 如果机器命令中不包含目的地地址,即,CPU可以不需要该目的地地址而修改IP。 9.3随着位移而移动的jmp命令,这种信息是什么呢?我们一步一步地分析。 首先,让我们简单地回想一下CPU执行指令的过程(如果想更多地想起的话,就复习一下2.10节的内容吧)。 9.3根据位移移动的jmp指令,CPU执行指令的过程: (从CS:IP读取指令到存储器单元,读取的指令进入指令缓冲区(2)(IP)=(IP )以读取的指令的长度,指定以下指令(3)指令继续1,重复这个过程。 根据9.3位移而转移的jmp指令,在此步骤中,参考程序9.2的图: jmpshortts指令的读取和执行步骤,根据9.3位移而转移的jmp指令,jmpshortts指令的读取和执行步骤: (1)(CS)=0BBDH,(CS:IP指向EB03(jmpshorts的机械代码) (2)读取命令代码EB03进入命令缓冲器(3)(IP)=(IP )读取的命令的长度=(IP) 2=0008,CS:IP是addax, 指向4)CPU指示指令缓冲器中的指令EB03 (5)在指令eb03被执行之后,(IP)=000BH,CS:IP指向incax。 根据上述过程,根据9.3位移迁移的jmp指令在CPU读入指令EB03后,IP指向下一个指令CS:0008的addax,1,执行EB03。 如果EB03未更改IP,CPU接下来会运行addax,1。 根据9.3位移进行迁移的jmp命令,CPU执行的EB03是变更了IP的迁移命令,执行后(IP)=000BH,CS:IP不指incax,CS:0008的addax,1。 CPU在执行EB03时,根据如何修改的IP,指示目标指令?基于脚本03。 另外,根据9.3位移转移的jmp命令的转移目的地地址是CS:000B,相对于此,在CPU执行EB03的情况下,当前的(IP)=0008、加上当前的IP值3时,(IP)=000BH、CS:IP能够指示目标命令在转移命令EB03中,虽然没有告诉CPU要转移的目的地地址,但通知CPU将转移的移位(即当前IP )向后移动3字节。 基于9.3位移的jmp指令,程序1、2中的jmp指令的位移相同,在3字节后位移,因此各自的机器代码为EB03。原来如此,与“jmp短标签”命令对应的机器代码不包含转移目的地地址,而包含转移的位移。 该位移是编译器根据汇编指令中的“标签”计算出的,根据9.3位移移动的jmp指令、根据9.3位移移动的jmp指令、结论: CPU执行jmp短标签指令时不需要目的地地址具体的过程演示是基于、9.3位移的jmp命令,实际上命令“jmp短标签”的功能是(IP)=(IP) 8位位移。 (1)8位移位=“标签”的地址-jmp指令后的第一字节的地址(2)short表示此处的位移为8位移位(3)8位移位的范围为-128127,以补数表示(如果不知道补数,则读注释2 ) 9.3通过位移进行跳跃的jmp命令中,有与命令“jmpshort标签”的功能相近的命令形式:跳到jmpnearptr标签实现的时间段。 命令“jmpnearptr标签”的功能是(IP )=(IP )移位16位。9.3通过移位进行跳跃的jmp命令指示 jmpnearptr标签的说明: (1)16位移位=标签的地址-jmp命令的第一字节的地址(2)nearptr表示这里的位移是16位位移,段16位移的范围为-3276932767,补数表示的(4)16位移在编译器编译时计算。 9.4以转移目的地址为命令的jmp命令,前述jmp命令在对应的机器代码中没有转移目的地地址,从而向当前IP的转移移位。 命令“jmpfarptr标签”实现了分段之间的迁移,也称为远程迁移。 9.4转移目的地地址为命令中的jmp命令,命令“jmpfarptr标签”功能如下: (CS)=具有标签的段的段地址; (IP)=具有标签的段的偏移地址。 farptr示出指令用被标记的段地址和偏移地址来修改CS和IP。 看看下一个步骤吧。 9.4目标地址为命令的jmp命令,程序9.3:assume cs : codesgcodesgsgmentstart : movax、0movbx、0 jmpfarptrsdb 256 dup (0) s : ad 1以1incaxcodesgendsendstart 9.4目的地地址为指令的jmp指令,是通过Debug将程序9.3翻译成机械代码的结果,图:源程序中的db256dup(0)被解释为通过Debug符合的多个汇编指令。 这不重要。 支持jmpfarptrs的机器代码:请注意EA0B01BD0B包含目标地址。 9.4迁移的目的地地址是命令中的jmp命令,“0B01BD0B”是目的地地址存储在命令中的顺序,上位地址的“BD0B”是迁移的段地址:0BBDH,下位地址的“0B01”是偏移地址: 010BH。 有关“jmpX标签”格式指令的详细分析,请参见注释3。 另外,9.4传输目的地地址为指令中的jmp指令,9.5传输目的地地址为寄存器中的jmp指令,指令格式: jmp16位寄存器功能: IP=(16位寄存器)这一指令在上一课(参照2.11节)中进行了说明9.6转移目的地地址在存储器中的jmp命令、转移目的地地址在存储器中的jmp命令中,(1)jmpwordptr存储器单元地址(段内转移)功能:从存储器单元地址存储了1个字,是转移目的地的偏移地址。 存储单元的地址可以以地址方式的任意形式指定。 例如,9.6传送目的地地址在存储器中的jmp命令,(1)jmpwordptr存储器单元地址(段内传送)例:在执行了movax,0123Hmovbx、axjmpwordptrbx后,(IP)=0123H,movax,000 axjmpwordptrds:0执行后,(IP)=0123H,9.6地址在存储器中的jmp命令,地址在存储器中的jmp命令的第二格式: (2)jmpdwordptr存储器单元地址(段间转送)功能:存储器(CS)=(存储单元地址2)(IP)=(存储单元地址)存储单元地址以地址方式的任意形式给出。 例如,9.6传送目的地地址在存储器中的jmp命令,(2)jmpdwordptr存储器单元地址(段间传送)例:movax,0123Hmovbx、axmovwordptrbx 2、0jmpdwordptrbx执行后在运行movax,0123Hmovds:0、axmovwordptrds:2、0jmpdwordptrds:0之后,(CS)=0(IP)=0123HCS:IP指示0000:0123。 尤其是检查点9.1(p170 )未完成该检查点,请不要向下移

温馨提示

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

评论

0/150

提交评论