第2章8086的指令系统三.ppt
《第2章8086的指令系统三.ppt》由会员分享,可在线阅读,更多相关《第2章8086的指令系统三.ppt(60页珍藏版)》请在三一文库上搜索。
1、第 2 章 8086的指令系统,(三),2,2.4 控制转移类指令,控制转移类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO,控制转移类指令通过改变IP(和CS)值,实现程序执行顺序的改变,3,2.4.1 无条件转移指令,只要执行无条件转移指令JMP,就使程序转到指定的目标地址处,从目标地址处开始执行指令 操作数label是要转移到的目标地址(目的地址、转移地址),JMP label ;程序转向label标号指定的地址,4,目标地址的
2、范围:段内,段内转移近转移(near) 在当前代码段64KB范围内转移 ( -3276832767) 不需要更改CS段地址,只要改变IP偏移地址 段内转移短转移(short) 转移范围可以用一个字节表达,在段内128127范围的转移,5,目标地址的范围:段间,段间转移远转移(far) 从当前代码段跳转到另一个代码段,可以在1MB范围 更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达,叫做32位远指针,它就是逻辑地址,代码段,代码段,实际编程时,MASM汇编程序会根据目标地址的距离,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制
3、,6,JMP指令分成4种类型: 段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址,7,段内转移、相对寻址,JMP label ;IPIP+位移量 位移量是紧接着JMP指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负 again: dec cx ;标号again的指令 jmp again ;转移到again处继续执行 jmp output ;转向output output: mov result,al ;标号output的指令,8,段内转移、间接寻址,JMP r16/m16 ;IPr16
4、/m16 将一个16位寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容 jmp ax ;IPAX jmp word ptr 2000h ;IP2000h,9,段间转移、直接寻址,JMP far ptr label ;IPlabel的偏移地址 ;CSlabel的段地址 将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的otherseg,10,段间转移、间接寻址,JMP far ptr mem ;IPmem,CSmem+2 用一个双字存储单元表示要跳
5、转的目标地址。 这个目标地址存放在主存中连续的两个字单元中的,低位字送IP寄存器,高位字送CS寄存器 mov word ptr bx,0 mov word ptr bx+2,1500h JMP far ptr bx ;转移到1500h:0,11,Jmp转移指令的原理,可参见: 王爽第九章,12,2.4.2 条件转移指令,指定的条件cc如果成立,程序转移到由标号label指定的目标地址去执行指令;条件不成立,则程序将顺序执行下一条指令 操作数label是采用相对寻址方式的短转移标号 表示Jcc指令后的那条指令的偏移地址,到目标指令的偏移地址的地址位移 距当前IP地址128127个单元的范围之内,
6、Jcc label ;条件满足,发生转移:IPIP8位位移量 ;条件不满足,顺序执行,13,Jcc指令的分类,Jcc指令不影响标志,但要利用标志。 根据利用的标志位不同,16条指令分成3种情况: 1. 判断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小 ,14,转移条件cc:单个标志状态,JZ/JE ZF=1 Jump if Zero/Equal JNZ/JNE ZF=0 Jump if Not Zero/Not Equal JS SF=1 Jump if Sign JNS SF=0 Jump if Not Sign JP/JPE PF=1 Jump if Parity/Par
7、ity Even JNP/JPO PF=0 Jump if Not Parity/Parity Odd JO OF=1 Jump if Overflow JNO OF=0 Jump if Not Overflow JC CF=1 Jump if Carry JNC CF=0 Jump if Not Carry,采用多个助记符,只是为了方便记忆和使用,15,转移条件cc:两数大小关系,无符号数 JB/JNAE CF=1 Jump if Below/Not Above or Equal JNB/JAE CF=0 Jump if Not Below/Above or Equal JBE/JNA CF
8、=1或ZF=1 Jump if Below/Not Above JNBE/JA CF=0且ZF=0 Jump if Not Below or Equal/Above,16,SF=0 SF=0 SF=1 SF=1 OF=0 OF=1 OF=0 OF=1 正,= 溢出,负,=,带符号数 JL/JNGE SFOF Jump if Less/Not Greater or Equal JNL/JGE SF=OF Jump if Not Less/Greater or Equal JLE/JNG SFOF或ZF=1 Jump if Less or Equal/Not Greater JNLE/JG SF=
9、OF且ZF=0 Jump if Not Less or Equal/Greater,17,判断单个标志位状态,这组指令单独判断5个状态标志之一 JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为零(或相等) JS和JNS:利用符号标志SF,判断结果是正是负 JO和JNO:利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中“1”的个数是偶是奇 JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF,判断结果是否进位或借位,例题2.38,例题2.39,例题2.40,例题2.41,例题2.42,18,例2.38:JZ/JNZ指令,tes
10、t al,80h ;测试最高位 jz next0 ;D70(ZF1),转移 mov ah,0ffh ;D71,顺序执行 jmp done ;无条件转向 next0: mov ah,0 done: .,test al,80h ;测试最高位 jnz next1 ;D71(ZF0),转移 mov ah,0 ;D70,顺序执行 jmp done ;无条件转向 next1: mov ah,0ffh done: .,19,例2.39:JS/JNS指令,;计算|XY|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作数 ;结果存入result mov ax,X sub ax,Y jns nonneg n
11、eg ax ;neg是求补指令 nonneg: mov result,ax,20,例2.40:JO/JNO指令,;计算XY; ;X和Y为存放于X单元和Y单元的16位操作数 ;若溢出,则转移到overflow处理 mov ax,X sub ax,Y jo overflow . ;无溢出,结果正确 overflow: . ;有溢出处理,21,例2.41:JP/JNP指令,;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数时 ;则令其最高位为“0”;否则令最高位为“1” and al,7fh ;最高位置“0”,同时判断“1”的个数 jnp nex
12、t ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next: .,22,例2.42:JC/JNC指令,;记录BX中1的个数 xor al,al ;AL0,CF0 again: test bx,0ffffh ;等价于 cmp bx,0 je next shl bx,1 jnc again inc al jmp again next: . ;AL保存1的个数,另一种做法,23,记录BX中“1”的个数,xor al,al ;AL0,CF0 again: cmp bx,0 jz next shl bx,1 ;也可使用 shr bx,1 adc al,0 jmp again
13、 next: . ;AL保存1的个数,24,比较无符号数高低,无符号数的大小用高(Above)低(Below)表示 利用CF确定高低、利用ZF标志确定相等(Equal) 两数的高低分成4种关系: 低于(不高于等于):JB(JNAE) 不低于(高于等于):JNB(JAE) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA ),25,例2.43a:比较无符号数,cmp ax,bx ;比较ax和bx jnb next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,结果:AX保存较大的无符号数,26,比较有符号数大小,有符号数的大(Greater
14、)小(Less)需要组合OF、SF标志,并利用ZF标志确定相等(Equal) 两数的大小分成4种关系: 小于(不大于等于):JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ),27,例2.43b:比较有符号数,cmp ax,bx ;比较ax和bx jnl next ;若axbx,转移 xchg ax,bx ;若axbx,交换 next: .,结果:AX保存较大的有符号数,28,2.4.3 循环指令(loop),循环指令默认利用CX计数器 label操作数采用相对短转移寻址方式,LOOP label ;CXCX1,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 指令系统
链接地址:https://www.31doc.com/p-2986631.html