lec09 转移控制类指令(1)_第1页
lec09 转移控制类指令(1)_第2页
lec09 转移控制类指令(1)_第3页
lec09 转移控制类指令(1)_第4页
lec09 转移控制类指令(1)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 09 讲讲 转移控制类指令(转移控制类指令(1)转移指令转移指令 控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,值,实现程序执行顺序的改变实现程序执行顺序的改变n直接寻址方式直接寻址方式q指令代码中直接给出地址差(即目的地址指令代码中直接给出地址差(即目的地址相对相对于当于当前前IP的位移量),转移到的目的地址(转移后的的位移量),转移到的目的地址(转移后的IP值)就是当前值)就是当前IP值加上位移量值加上位移量n间接寻址方式间接寻址方式q指令代码中指示寄存器或存储单元,目的地址从寄指令代码中指示寄存器或存储单元,目的地址从寄存器或存储单元中存器或存储单元中间接间接获

2、得获得用标号表达用标号表达用寄存器或存储器操作数表达用寄存器或存储器操作数表达 与转移地址有关的寻址方式:与转移地址有关的寻址方式:用来确定转移控制类指令的转向地址(目标地址)用来确定转移控制类指令的转向地址(目标地址)。目标地址的寻址范围:段内寻址目标地址的寻址范围:段内寻址n段内转移段内转移近转移(近转移(near)q在当前代码段在当前代码段64KB范围内转移(范围内转移( 32KB范围)范围)q不需要更改不需要更改CS段地址,段地址,只要改变只要改变IP偏移偏移地址地址n段内转移段内转移短转移(短转移(short)q转移范围可以用一个字节表达,在段内转移范围可以用一个字节表达,在段内12

3、8127范围的转移范围的转移代码段代码段代码段代码段目标地址的寻址范围:段间寻址目标地址的寻址范围:段间寻址n段间转移段间转移远转移(远转移(far)q从当前代码段跳转到另一个代码段,可从当前代码段跳转到另一个代码段,可以在以在1MB范围范围q需要需要更改更改CS段地址和段地址和IP偏移地址偏移地址q目标地址必须用一个目标地址必须用一个32位数表达,叫做位数表达,叫做32位远指针,它就是逻辑地址位远指针,它就是逻辑地址代码段代码段代码段代码段 实际编程时,汇编程序会根据目标地址的属实际编程时,汇编程序会根据目标地址的属性,性,自动处理自动处理成短转移、近转移或远转移成短转移、近转移或远转移 程

4、序员可用操作符程序员可用操作符short、near ptr 或或far ptr 强制成为需要的转移类型强制成为需要的转移类型 控制转移指令:控制转移指令: 无条件转移指令无条件转移指令 JMP 条件转移指令条件转移指令JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、JLE / JNLE、 JCXZ 循环指令循环指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE 子程序调用和返回指令子程序调用和返回指令 CALL、RET 中断与中断返回指令中断与中断返回指令

5、INT、INTO、IRET1. 无条件转移指令无条件转移指令n只要执行只要执行JMP指令,就使程序转到指定的目标地址指令,就使程序转到指定的目标地址处,从目标地址处开始执行那里的指令处,从目标地址处开始执行那里的指令n操作数操作数OPR是要转移到的是要转移到的目标地址目标地址nJMP指令分成指令分成4种类型:种类型: 段内转移、直接寻址段内转移、直接寻址 段内转移、间接寻址段内转移、间接寻址 段间转移、直接寻址段间转移、直接寻址 段间转移、间接寻址段间转移、间接寻址JMP JMP OPROPR;程序转向;程序转向OPROPR指定的地址指定的地址jmp 示例示例jmp againjmp agai

6、n;转移到;转移到againagain处继续执行处继续执行again:again:dec cxdec cx;标号;标号againagain的指令的指令jmp outputjmp output;转向;转向outputoutputoutput:output:mov result,almov result,al;标号;标号outputoutput的指令的指令1)JMP ONE;段内直接转移;段内直接转移2)LEA DX, ONE JMP DX;寄存器间接段内转移;寄存器间接段内转移3)LEA BX, TARGET JMP WORD PTRBX ;存储器间接段内转移;存储器间接段内转移4)JMP TA

7、RGET;存储器间接段内转移;存储器间接段内转移已在数据段定义存储器单元已在数据段定义存储器单元“TARGET” :TARGETDW ONE下面四组指令都可以实现向下面四组指令都可以实现向标号标号“ONE”的转移:的转移:1)JMP FAR PTR TWO;远程直接转移;远程直接转移2)LEA BX, FAR_TGT JMP DWORD PTRBX;远程间接转移;远程间接转移3)JMP FAR_TGT;远程间接转移;远程间接转移假设已在数据段定义存储器单元假设已在数据段定义存储器单元“FAR_TGT”如下:如下:FAR_TGTDDTWO下面三组指令都可以实现向下面三组指令都可以实现向远程标号远

8、程标号“TWO”的转移:的转移:2. 条件转移指令条件转移指令n条件转移指令条件转移指令Jcc根据指定的条件确定程序根据指定的条件确定程序是否发生转移。是否发生转移。Jcc label;条件满足条件满足,发生转移发生转移;IPIP8位位移量;位位移量;否则,顺序执行否则,顺序执行qlabel是一个标号、一个是一个标号、一个8位位移量位位移量qJcc只支持只支持短转移短转移Jcc指令的分类指令的分类nJcc指令不影响标志位,但要利用标志位指令不影响标志位,但要利用标志位n根据利用的标志位不同,分成根据利用的标志位不同,分成4种情况:种情况: 判断单个标志位状态判断单个标志位状态 比较无符号数高低

9、比较无符号数高低 比较有符号数大小比较有符号数大小(4) 测试测试 CX 的值为的值为 0 则转移则转移 Jcc指令实际虽然只有指令实际虽然只有16条,但却有条,但却有30个助记符个助记符 采用多个助记符,目的是为了方便记忆和使用采用多个助记符,目的是为了方便记忆和使用(1) 根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移 格式格式 测试条件测试条件JZ(JE) OPR ;ZF = 1JNZ(JNE) OPR ;ZF = 0JS OPR ; SF = 1JNS OPR ;SF = 0JO OPR ; OF = 1JNO OPR ;OF = 0JP OPR ;PF = 1JNP O

10、PR ; PF = 0JC OPR ; CF = 1JNC OPR ; CF = 0(2) 比较两个无符号数,并根据比较结果转移比较两个无符号数,并根据比较结果转移 格式格式 测试条件测试条件 JB (JNAE/JC) OPR ; CF = 1 JNB (JAE/JNC) OPR ; CF = 0 JBE (JNA) OPR ; CFZF = 1 JNBE (JA) OPR ; CFZF = 0(3) 比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移格式格式 测试条件测试条件 JL (JNGE) OPR ;SF OF = 1 JNL (JGE) OPR ; SF OF

11、= 0 JLE (JNG) OPR ; (SF OF)ZF = 1 JNLE (JG) OPR ; (SF OF)ZF = 0(4) 测试测试 CX 的值为的值为 0 则转移则转移 格式格式 测试条件测试条件 JCXZ OPR ;(CX)=0 MOV AX, XMOV AX, XCMP AX, 50CMP AX, 50 TOO_HIGH TOO_HIGHSUB AX, YSUB AX, Y OVERFLOW OVERFLOW NONNEG NONNEGNEG AXNEG AX NONNEG: NONNEG: MOV RESULT, AX MOV RESULT, AXTOO_HIGH:TOO_H

12、IGH: OVERFLOW: OVERFLOW: 例:如果例:如果 X50,转到,转到TOO_HIGH;否则;否则 |X-Y| RESULT, 如果溢出转到如果溢出转到 OVERFLOW, JGJGJOJOJNSJNS例题例题n【例【例 2 29】 AX中存放的数据如果是奇数,将中存放的数据如果是奇数,将CL清清0,如果是偶数,将,如果是偶数,将CL设置成设置成-1。n问题:如何判断问题:如何判断AX中的数据是奇数还是偶数?中的数据是奇数还是偶数?n解答:解答:判断判断AX最低位是最低位是“0”(偶数),还是(偶数),还是“1”(奇数(奇数)。可以用位操作类指令)。可以用位操作类指令1:用测试

13、指令将除最低位外的其他位变成用测试指令将除最低位外的其他位变成0,保留最低位不变。判断这,保留最低位不变。判断这个数据是个数据是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数就是偶数;否则,为奇数;否则,为奇数3:将最低位用移位指令移至最高位(符号位),判断符号标志是将最低位用移位指令移至最高位(符号位),判断符号标志是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数解答解答1: 用用JZ指令实现指令实现 TEST AX,01HJZ EVEMOV CL,0JMP NEXTE

14、VE:MOV CL,0FFHNEXT:解答解答2: 用用JNC指令实现指令实现 MOV BX,AXSHR BX,1JNC EVEMOV CL,0JMP NEXTEVE:MOV CL,0FFHNEXT: 还可用还可用SAR、ROR和和RCR指令指令解答解答3 :用:用JNS指令实现指令实现 MOV BX,AXROR BX,1JNS EVEMOV CL,0JMP NEXTEVE:MOV CL,0FFHNEXT: 错误!错误!循环指令不影响循环指令不影响SF等标志等标志增加增加ADD BX,0或或AND BX,BX 【例例 2-30】 DVAR1和和 DVAR2为已定义的有符号数双字为已定义的有符号数双字变量。如果变量。如果DVAR1 DVAR2,则设置,则设置CL值为值为1,否则设,否则设置置CL值为值为-1。MOV DX, WORD PTR DVAR1+2MOV DX, WORD PTR DVAR1+2MOV AX, WORD PTR DVAR1MOV AX, WORD PTR DVAR1CMP DX, WORD PTR DVAR2+2CMP DX, WORD PTR DVAR2+2JGJG BIG BIGJLJL NOTBIG NOTBIGCMP AX, WORD PTR DVAR2CMP AX, WORD PTR DVAR2JAJA BIG BIGNOTBIG: MOV C

温馨提示

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

最新文档

评论

0/150

提交评论