270 likes | 423 Views
2 .2 指令系统. 按功能分为: 数据传送指令 算术运算指令 位处理指令(逻辑运算指令) 串操作指令 控制转移指令 处理机控制指令. 五、程序转移指令— 无条件转移和条件转移. Part1 JMP AA. 无条件转移: 转移发生不需要状态信息,执行到 JMP 处则发生转移。. 无条件转移指令. Part2. 转移跳过的地址. AA XXXX Part3. 下一条执行指令. 条件转移: 当条件满足时发生转移,否则顺序执行下一条指令。. Part1 JCC AA. 条件转移指令. XXXX Part2. 条件 成立?. No.
E N D
2.2 指令系统 • 按功能分为: • 数据传送指令 • 算术运算指令 • 位处理指令(逻辑运算指令) • 串操作指令 • 控制转移指令 • 处理机控制指令
五、程序转移指令—无条件转移和条件转移 Part1 JMP AA 无条件转移: 转移发生不需要状态信息,执行到JMP处则发生转移。 无条件转移指令 Part2 转移跳过的地址 AA XXXX Part3 下一条执行指令 条件转移: 当条件满足时发生转移,否则顺序执行下一条指令。 Part1 JCC AA 条件转移指令 XXXX Part2 条件 成立? No 转移跳过的地址 AA XXX Part3 下一条执行指令 Yes 注意转移指令的寻址方式
五、程序转移指令—无条件转移 (P89) Part1 JMP1234H CS:0100H Part2 跳过1134H个单元 CS:1234H 1234H XXX Part3 1、JMP 指令 格式:JMP dest 功能:无条件转移到操作数(dest)所指示的地址,不影响标志。 • 段内转移: 16位立即数 (IP)←START • 直接转移 : JMP START NERA 标号 例如: JMP 1234H 指令跳转到 CS:1234H执行 例如:JMP OBJ1 (OBJ1是一NERA标号,其值为1234H)
五、程序转移指令—无条件转移 Part1 JMP 12H CS:1220H Part2 12H+2H=14H CS:1234H XXXXX Part3 • 段内转移: • 直接短转移 : • JMP SHORT START • SHORT START为 8位位移量(-128~+127),或一距离本指令 • -126~+129字节的NEAR标号 • 执行操作:(IP)←(IP)+2±位移量 Part3 XXXXX 例如: JMP 12H 指令跳转到 CS:(IP+2+12H)执行。 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 FAR 标号 DS:0200H 78H 56H IP=5678H 34H CS=1234H 12H Part1 JMP DWORD PTR [DI] CS:0100H Part2 1234H:5678H XXX Part3 例如: JMP 12345678H 指令跳转到 1234:5678H执行 • 间接转移 :JMP DEST • DEST为32位内存操作数 例如:DI=200H 双字(DS:0200H)=12345678H JMP DWORD PTR [DI] 指令执行: 低位字:(IP)=5678H 高位字(CS)=1234H
五、程序转移指令—条件转移 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)内完成。 简单转移:条件是由标志寄存器中的标志的状态决定的转移。 复杂转移:条件是由有符号数和无符号数的大小决定的转移。 • 简单转移:
五、程序转移指令—条件转移 复杂转移: 由多个标志的状态决定的转移,常在减法/自减指令/比较指令后。 • 无符号数转移指令(根据CF、ZF判定) • 比较两个无符号数,并根据比较结果转移 • JA 标号 ;两数比较,高于则转移 (JNBE) • JNA 标号 ;两数比较,不高于则转移(JBE) • JB 标号 ;两数比较,低于则转移 (JNAE) • JNB 标号 ;两数比较,不低于则转移(JAE) • 有符号数转移指令(根据SF、OF、ZF判定) • 比较两个带符号数,并根据比较结果转移 • JG 标号 ;两数比较,大于则转移 (JNLE) • (SFCF=0 & ZF=0) • 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 标号
五、程序转移指令—子程序调用与返回: 调用 CALL 过程名 功能:(1)下条指令的地址压入堆栈。 对于段内调用将IP的值压入堆栈 对于段间调用先将CS的值压入堆栈,再将IP的值压入堆栈。 (2)子程序的地址送入CS:IP(段内调用只送IP)从而转入子程序运行。 返回指令 RET 子程序的最后一条指令,用于返回CALL指令的下条指令继续执行。 功能:(1) 对于段内调用只将当前[SP]弹进IP,从而使程序正常返回。 (2)对于段间调用则先弹IP,再弹CS。
五、程序转移指令—处理器控制 对处理机的工作状态的控制指令,分为标志控制、外设同步工作状态控制两类指令。 • 标志控制 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 • (X)同步控制
五、程序转移指令—处理器控制 • 同步控制 HLT 暂停指令执行,CPU处于空操作状态,以下三种情况可以使CPU脱离暂定状态。 • RESET • NMI • 当IF=1时INTR • 该指令是为中断等待而设。 NOP 空操作指令,进行一个总线周期的空操作,相当于延时4T时钟表周期。 ESC OPCODE ,SRC 交权指令, 把控制权交给协处理器。 OPCODE~6位立即数,外部处理器操作指令。 SRC~外部处理器的内存源操作数,由8086取出放在数据总线上供外部理器操作。
题1: 8086系统中,若一内存单元在DS=0980H时,EA=0134H,则当DS=0820H时,EA=?
第 二章 习 题 课 题2: 已知 DS = 091DH, SS = 1E4AH, AX = 1234H, BX = 0024H, CX = 5678H, BP = 0024H, SI = 0012H, DI = 0032H, (09226H) = 00F6H, (09228H) =1E40H, (1E4F6H) = 091DH. 在以上给出的环境下,试问下列指令或指令段执行后的结果如何? (1) MOV CL, [ BX + 20H] [ SI]; PA=DS*16+[BX+SI+20H]=091DH*16+0024H+0012H+20H=09226H ([09226H])=(CL)=F6H (2) MOV [BP][DI], CX; PA=SS*16+([BP+DI])=1E4A0H+0024H+0032H=1E4F6H ([1E4F6H])=(CX)=5678H (3) LEA BX,[BX+20H][SI] MOV AX, [ BX + 2 ]; (BX)=(BX+SI+20H)=0024H+0012H+20H=0056H PA=DS*16+[BX+2H]=091D0H+0056H+2H= 09228H (AX)=([09228H])=1E40H
第二章 习 题 课 (X)题2: 已知 DS = 091DH, SS = 1E4AH, AX = 1234H, BX = 0024H, CX = 5678H, BP = 0024H, SI = 0012H, DI = 0032H, (09226H) = 00F6H, (09228H) =1E40H, (1E4F6H) = 091DH. 在以上给出的环境下,试问下列指令或指令段执行后的结果如何? (5) XCHG CX, [BX + 32H] XCHG [ BX + 20H] [SI] ,AX PA1= DS*16+BX+32H =091D0H+0024H+0032H=09226H 与CX进行交换 (CX)=00F6H ([09226H])=(CX)=5678H PA2= DS*16+BX+SI+20H = 091D0H+0024H+0012H+0020H =09226H 与AX进行交换 (AX)=5678H ([09226H])=1234H
第二章 习 题 课 题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果。 (1) MOV AX, 1352H AX =1352H (2) MOV AX, [1352H] AX =26FFH (3) MOV 0150H[BX] ,CH PA1= DS*16+BX+150H=10000H+1200H+150H=11350H (11350H) = 33H (11351H)= 3CH
第二章 习 题 课 题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果。 (4) Mov AX,0150H[BP] PA= SS*16+BP+150H=20000H+1200H+150H=21350H (21350H) 送AX=5188H AX =5188H (5) POP AX PA= SS*16+SP=20000H+1352H=21352H 栈顶为21352H,将其送入AX.该单元未知为XXXXH AX =xxxxH SP =1354H
第二章 习 题 课 题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果(有关内存单元的值、标志位)。 (6) ADD [SI] ,CX PA1= DS*16+SI=10000H+1354H=11354H (11354H)=52H (11355H)=E7H E752H+339AH=1AEC H ; CF=1 E 7 5 2 H + 3 3 9 A H 1 1 A E C H 1 (11355H) =1AH ( 11354H) =ECH SF=0 ZF =0 , PF = , CF =1 , OF =0
第二章 习 题 课 题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果。 (7) SUB BH,0l50H[BX] [SI] PA=DS*16+BX+SI+150H =10000H+1200H+1354H+150H=126A4H (126A4H)=9DH BH=12H 12H-9DH=75H SF=0 ZF =0 , PF = 0 , CF =1 , OF =0
第二章 习 题 课 CF 1010 0101B=A5H CF=1 11010010B=D2H (X)题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果。 (10) SAR BYTE PTR 0150H[ BX], 1 PA=10000H+1200H+150H=11350H (11350H)=0A5H=1010 0101B (11350H)=D2H CF =1 OF =0
第二章 习 题 课 (X)题3: 设, DS=1000H; SS = 2000H, AX = 1A2BH, BX = 1200H, CX = 339AH, BP =1200H,SP = 1352H, SI= 1354H, (11350H) =0A5H, (11351H) = 3CH, (11352H) =OFFH,(11353H) = 26H, (11354H) = 52H, (11355H) = 0E7H, (126A4H) = 9DH,(126A5H) = 16H, (21350H) = 88H, (21351H) = 51H. 下列各指令都在此环境下执行,在下列各小题的空格中填人相应各指令执行结果。 (11) SAL BYTE PTR 0150H[BX],1 PA=10000H+1200H+150H=11350H (11350H)=0A5H=1010 0101B 一次移位时最高位不发变化时OF=0 ,最高位发生变化OF=1 SAL 010 0 1010B=4AH CF =1 (11350H)=4AH ,CF =1 ,OF=1
第二章 习 题 课 题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
第二章 习 题 课 题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
第二章 习 题 课 题5: 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。
第二章 习 题 课 题 设下列各转移指令的第一个字节在内存中的地址为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=1772H (CS)=2000H (3)为段内长转移。 (IP)=(BX)=16C0H (CS)=2000H
第二章 习 题 课 题 设下列各转移指令的第一个字节在内存中的地址为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
课后作业: • P71 4、6、7、8、10