170 likes | 328 Views
3 .2 指令系统. 按功能分为: 数据传送指令 算术运算指令 位处理指令(逻辑运算指令) 串操作指令 控制转移指令 处理机控制指令. 五、程序转移指令— 无条件转移和条件转移. Part1 JMP AA. 无条件转移: 转移发生不需要状态信息,执行到 JMP 处则发生转移。. 无条件转移指令. Part2. 转移跳过的地址. AA XXXX Part3. 下一条执行指令. 条件转移: 当条件满足是发生转移,否则顺序执行下一条指令。. Part1 JCC AA. 条件转移指令. XXXX Part2. 条件 成立?. No.
E N D
3.2 指令系统 • 按功能分为: • 数据传送指令 • 算术运算指令 • 位处理指令(逻辑运算指令) • 串操作指令 • 控制转移指令 • 处理机控制指令
五、程序转移指令—无条件转移和条件转移 Part1 JMP AA 无条件转移: 转移发生不需要状态信息,执行到JMP处则发生转移。 无条件转移指令 Part2 转移跳过的地址 AA XXXX Part3 下一条执行指令 条件转移: 当条件满足是发生转移,否则顺序执行下一条指令。 Part1 JCC AA 条件转移指令 XXXX Part2 条件 成立? No 转移跳过的地址 Yes AA XXX Part3 下一条执行指令
五、程序转移指令—无条件转移 1、JMP 指令 格式:JMP dest 功能:无条件转移到操作数(dest)所指示的地址,不影响标志。 Part1 JMP1234H • 段内转移: 16位立即数 CS:0100H (IP)←START • 直接转移 : JMP START Part2 跳过1134H NERA 标号 例如: JMP 1234H 指令跳转到 CS:1234H执行。 CS:1234H 1234H XXX Part3
五、程序转移指令—无条件转移 Part1 JMP 12H • 段内转移: • 直接短转移 : • JMP SHORT START • SHORT START为 8位位移量(-128~+127) CS:1220H Part2 12H+2H=14H CS:1234H XXXXX Part3 • 执行操作:(IP)←(IP)+2±位移量 例如: JMP 12H 指令跳转到 CS:(IP+2+12H)执行。 Part3 XXXXX CS:1224H Part2 2H—12H=—10H 例如: JMP -12H 指令跳转到 CS:(IP+2 - 12H)执行 JMP —12H Part1 CS:1234H
五、程序转移指令—无条件转移 34H DS:0100H 12H IP=1234H Part1 JMP [BX] CS:0100H Part2 跳过1134H 例如,(BX)=100H,DS:0100H=1234H JMP [BX] 指令跳转到 CS:1234H执行。 CS:1234H 1234H XXX Part3 • 段内转移: • 间接转移 :JMP DEST——DEST为 16寄存器或内存操作数 • 执行操作:(IP)←DEST 例如: (SI)=0100H JMP SI 指令跳转到 CS:0100H执行。
五、程序转移指令—无条件转移 • 段间转移: (IP)←低16位 (CS)←高16位 32位立即数 • 直接转移 : JMP DEST 32内存操作数 FAR 标号 DS:0200H 78H 56H IP=5678H 34H CS=1234H 12H Part1 JMP DWORD PTR [DI] 例如:DI=200H 双字(DS:0200H)=12345678H JMP DWORD PTR [DI] 指令执行: 低位字:(IP)=5678H 高位字:(CS)=1234H CS:0100H Part2 1234H:5678H XXX Part3 例如: JMP 12345678H 指令跳转到 1234:5678H执行
五、程序转移指令—条件转移 CF JO 标号 OF=1结果溢出则转移到标号所在地址 JP 标号 PF=1 结果1的个数为偶数个则转移 JZ 标号 ZF=1结果为零则转移到标号所在地址 JC 标号 CF=1有进位则转移到标号所在地址 ZF JNZ 标号 ZF=0 结果为非零则转移到标号所在地址 JNO 标号 OF=0结果未溢出则转移到标号所在地址 JNP 标号 PF=0 结果1的个数为奇数个则转移 JNC 标号 CF=0无进位则转移到标号所在地址 JS 标号 SF=1 结果为负则转移到标号所在地址 SF FR JNS 标号 SF=0 结果非负则转移到标号所在地址 PF OF 条件转移都是短转移,转移距离只能在(-128~+127)内完成。 简单转移:条件是由标志寄存器中的标志的状态决定的转移。 复杂转移:条件是由有有符号数和无符号数的大小决定的转移。 • 简单转移:
五、程序转移指令—条件转移 复杂转移: 由多个标志的状态决定的转移,分为有符号数和无符号数转移 • 无符号数转移指令 • 比较两个无符号数,并根据比较结果转移 • JA 标号 ;两数比较,高于则转移 (JNBE) • JNA 标号 ;两数比较,不高于则转移(JBE) • JB 标号 ;两数比较,低于则转移 (JNAE) • JNB 标号 ;两数比较,不低于则转移(JAE) • 有符号数转移指令 • 比较两个带符号数,并根据比较结果转移 • JG 标号 ;两数比较,大于则转移 (JNLE) • JNG 标号 ;两数比较,不大于则转移(JLE) • JL 标号 ;两数比较,小于则转移 (JNGE) • JNL 标号 ;两数比较,不小于则转移(JGE)
五、程序转移指令—循环控制 • 测试CX的值为0则转移 JCXZ 标号 ;(CX)=0则转移 • 循环控制指令 CX计数循环次数,每循环一次CX← CX-1 • 无条件循环 CX≠0转移到标号继续循环,CX=0顺序执行。 LOOP 标号 • 条件循环 CX≠0且 ZF=1转移到标号继续循环, CX=0或 ZF=0顺序执行。 CX≠0 且 ZF=0转移到标号继续循环, CX=0或 ZF=1顺序执行。 LOOP Z 标号 LOOPNZ 标号
五、程序转移指令—处理器控制 对处理机的工作状态的控制指令,分为标志控制、外设同步工作状态控制两类指令。 • 标志控制 CF标志 CLC CF=0 STC CF=1 CMC CF= CF • 同步控制 WAIT 指令——CPU处于空操作状态,每5个T周期测试信号线 当为低电平时脱离WAIT LOCK 指令的前缀,在执行有LOCK指令时发出总线封锁信号, 禁止其它主控设备申请总线。 例如 LOCK MOV AX,BX DF标志 CLD DF=0 STD DF=1 IF标志 CLI IF=0 STI IF=1
五、程序转移指令—处理器控制 • 同步控制 HLT 暂定指令CPU处于空操作状态,以下三种情况可以使CPU脱离暂定状态。 • RESET • NMI • 当IF=1时INTR • 该指令是为中断等待而设。 NOP 空操作指令,进行一个总线周期的空操作,相当于延时4T时钟周期。 ESC OPCODE ,SRC 交权指令, 把控制权交给协处理器。 OPCODE~6位立即数,外部处理器操作指令。 SRC~外部处理器的内存源操作数,由8086取出放在数据总线上供外部理器操作。
第 三 章 习 题 课 P129 3.4题 阅读下列各小题的指令序列,在后面空格中填人该指令序列的执行结果。 (1) MOV BL,85H MOV AL,17H ADD AL,BL ;AL=85H+17H=09CH DAA ;AL=09CH+66H=02H CF=1 AL =02H BL=85H CF =1 (2) MOV AX,BX NOT AX ADD AX, BX ;相反数相加=FFH INC AX ;AX=0H INC不影响标志位CF=0H AX = 0H CF =0H debug
第 三 章 习 题 课 P129 3.4题 阅读下列各小题的指令序列,在后面空格中填人该指令序列的执行结果。 (3) MOV AX,OFF60H STC ;CF=1 MOV DX, 96 ;DX=96=0060H XOR DH, OFFH ;DH=FFH DX=FF60H CF=0 SBB AX DX ;AX=0000H AX =0000H ; CF =0 (4) MOV BX,OFFFEH MOV CL,2 ;BX=1111 1111 1111 1110B SAR BX, CL ;BX=1111 1111 1111 1111B CF=1 BX =FFFFH ; CF =1
第 三 章 习 题 课 P130 3.6题 3.6 AND AL, AL JZ BRCH1 ;AL=0满足条件 RCR AL, 1 JZ BRCH2 ;AL=01此时CF=0能满足条件 RCL AL, 1 INC AL ;FFH+1=00H JZ BRCH3 上述程序运行后,试回答: (1)当(AL)=0 时,程序转向BRCH1。 (2)当(AL)= 01H 时,程序转向BRCH2。 (3)当(AL)= FFH 时,程序转向BRCH3。
第 三 章 习 题 课 P130 3.3题 设下列各转移指令的第一个字节在内存中的地址为CS=2000H和IP =016EH,且环境均为DS=6000H, BX = 16C0H, (616C0H) = 46H, (616C1H) =01H, (616C2H) = 00H, (616C3H) = 30H ,(61732H) = 70H (61733H) = 17H。写出下列无条件转移指令执行后CS和IP的值。和指令左首的16进制编码是该指令的机器码。指令的目的地址用相应的标号表示。 (1)EBE7 JMP SHORT AGAIN (2)E90016 JMP NEAR OTHER (3)FFE3 JMB BX 解: (1)为段内短转移,SHORT AGAIN为8位位移量=(E7H)补=-19H (IP)=16EH+2H+(-19H)=157H (CS)=2000H (2)为段内长转移,NEAR OTHER为16位位移量=1600H (IP)=16EH+3H+1600H=1771H (CS)=2000H (3)为段内长转移。 (IP)=(BX)=16C0H (CS)=2000H
第 三 章 习 题 课 P130 3.3题 设下列各转移指令的第一个字节在内存中的地址为CS=2000H和IP =016EH,且环境均为DS=6000H, BX = 16C0H, (616C0H) = 46H, (616C1H) =01H, (616C2H) = 00H, (616C3H) = 30H ,(61732H) = 70H (61733H) = 17H。写出下列无条件转移指令执行后CS和IP的值。和指令左首的16进制编码是该指令的机器码。指令的目的地址用相应的标号表示。 (4)EA46010030 JMP FAR PROB (5)FF67 JMP WORD PTR 0072H[BX] (6)FFEB JMP DWORD PTR [BX] 解: (4)为段间转移 FAR PROB为地址3000H:0146H (IP)==0146H (CS)=3000H (5)为段内转移,目标地址DS:BX=6000H*10H+16C0H=616C0H→0146H (IP)=0146H (6)为段间转移,目标地址DS:[BX+2]:[BX]=[616C2H]:[616C0H]=3000H:0146H (IP)=0146H (CS)=3000H
课后作业: • P129 3.3 (1) (2) (3) • P130 3.6 • P131 3.11