《微机原理第3章4文档资料》由会员分享,可在线阅读,更多相关《微机原理第3章4文档资料(58页珍藏版)》请在金锄头文库上搜索。
1、3. 3.5 程序控制指令程序控制指令:控制程序的执行顺序控制程序的执行顺序DSESSSCSIP数据暂存器数据暂存器PSW标志标志寄存器寄存器执行部件控制电路执行部件控制电路指令译码器指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地地址址加加法法器器、指令指令1指令指令2指令指令3指令指令4、数据数据1数据数据2数据数据3、地址总线地址总线AB数据总线数据总线DB控制总线控制总线CB地地址址译译码码器器l程序是指令的集合程序是指令的集合l指令在内存中顺序存放指令在内存中顺序存放lCSCS和和
2、IPIP两寄存器的内容决两寄存器的内容决定了程序的流程,改变定了程序的流程,改变CSCS和和IPIP寄存器的值,就改变寄存器的值,就改变了程序执行的流程。了程序执行的流程。BB0001B12090 指令指令1指令指令2指令指令3指令指令n指令指令n+1指令指令n+21.为使程序转移到一个新的地方去执行,可以改变为使程序转移到一个新的地方去执行,可以改变IP的值,称为的值,称为段内转移段内转移(近转移,(近转移,NEAR);也可以改);也可以改变变CS、IP,称为称为段间转移段间转移(远转移,(远转移,FAR)。)。2.无论是段内还是段间转移,都有间接转移和直接转移无论是段内还是段间转移,都有间
3、接转移和直接转移之分。之分。 直接转移:指令中直接给出转移地址。直接转移:指令中直接给出转移地址。 间接转移:转移地址间接存储于寄存器或存储单元中。间接转移:转移地址间接存储于寄存器或存储单元中。计算段内转移地址有两种方法计算段内转移地址有两种方法n一种是把当前一种是把当前IP值增加或减少某一个值,也就是值增加或减少某一个值,也就是以当前指令为中心往前或往后转移,称相对转移。以当前指令为中心往前或往后转移,称相对转移。n另一种是以新的值完全代替当前另一种是以新的值完全代替当前IP值,称绝对转值,称绝对转移。移。n在在8086中,所有段内直接转移都是相对转移;所中,所有段内直接转移都是相对转移;
4、所有段内间接转移都是绝对转移。有段内间接转移都是绝对转移。8086提供了四种程序控制指令提供了四种程序控制指令w转移指令转移指令w循环控制指令循环控制指令w中断指令中断指令w过程调用指令过程调用指令1. 无条件转移指令无条件转移指令wJMP(Jump):无条件转移到无条件转移到目标地址目标地址target去执行程序。去执行程序。(1) 段内直接转移段内直接转移JMP SHORT LABEL 段内直接短转移,段内直接短转移,8位,位,-128+127JMP NEAR LABEL段内直接近转移,段内直接近转移,16位,位,-32768 +32767LABEL:标号,称为符号地址,表示转移的目的地。
5、:标号,称为符号地址,表示转移的目的地。功能:当前功能:当前IP的值的值+地址位移量地址位移量(IP) CS保持不变。保持不变。举例wJMP 7CH;段内直接短转移;段内直接短转移wJMP 6700H;段内直接近转移;段内直接近转移(2) 段内间接转移n格式:格式:JMP OPRDnOPRD是是16位的寄存器或者存储器地址位的寄存器或者存储器地址n若若OPRD是存储器操作数,则要加上类型指是存储器操作数,则要加上类型指示符示符WORD PTRnCS保持不变保持不变举例举例nJMP AX (IP)(AX),段内段内间接转移间接转移nJMP WORD PTRSI 设设(SI)=2600H,(DS)
6、=7000H,(72600H)=12H,(72601H)=34H则执行完指令后,则执行完指令后,(IP)=3412H(3) 段间直接转移段间直接转移格式:格式:JMP FAR label 指指令令中中直直接接提提供供要要转转移移的的16位位段段地地址址和和16位位的偏移地址。的偏移地址。例:例:JMP 8000H:6000H则则(CS)=8000H,(IP)=6000H 格式:格式:JMP OPRD操作:操作:OPRD是一个是一个32位的存储器地址,将位的存储器地址,将 指定的连续指定的连续4个内存单元的内容送入个内存单元的内容送入IP和和CS,低字的内容送,低字的内容送IP,高字的内容送,高
7、字的内容送CS。(4) 段间间接转移wJMP DWORD PTR BX设设(BX)=1000H,(DS)=2000H 21000H 12H 34H 56H 78H举例举例2. 条件转移指令条件转移指令 以单个状态标志位作为转移条件以单个状态标志位作为转移条件 以以CX的值为的值为0作为转移条件作为转移条件 以两个无符号数比较的结果作为转移以两个无符号数比较的结果作为转移条件条件高于:高于:Above 低于:低于:Below 以两个带符号数比较的结果作为转移以两个带符号数比较的结果作为转移条件条件助记符助记符 JG/ /JNLE 大于大于/ /不小于等于不小于等于 JGE/ /JNL 大于等于大
8、于等于/ /不小于不小于 JL/ /JNGE 小于小于/ /不大于等于不大于等于 JLE/ /JNG 小于等于小于等于/ /不大于不大于 大于:Great 小于:Less例题例题 在以在以TABEL为首地址的内存数据段中,存为首地址的内存数据段中,存放有放有100个个8位带符号数,试统计其中正数、位带符号数,试统计其中正数、负数和零的个数,并分别将个数存入负数和零的个数,并分别将个数存入PLUS、MINUS和和ZERO 3个单元中。个单元中。(见(见P136 例例3-43)XOR AL,ALMOV PLUS,ALMOV MINUS,ALMOV ZERO,ALLEA SI,TABLEMOV CX
9、,100CLDAGAIN:LODSB CMP AL,0 JZ X1 JG X2 INC MINUS JMP NEXT X1: INC ZERO JMP NEXT X2: INC PLUS NEXT:DEC CX JNZ AGAIN HLT 3. 循环控制指令循环控制指令u 在循环程序中用来控制循环,其控制转向在循环程序中用来控制循环,其控制转向的目标地址是以当前的目标地址是以当前IP内容为中心的内容为中心的-128+127。u循环次数预先放入循环次数预先放入CX中,每循环一次,中,每循环一次,CX内容减内容减1,若,若(CX) 0,则继续循环,否,则继续循环,否则退出循环。则退出循环。(1)L
10、OOP指令指令 格式:格式:LOOP LABEL 执行操作:(执行操作:(CX)(CX)1, CX 0,继续循环,继续循环 CX=0,退出循环,退出循环 LOOP指令相当于以下两条指令的组合 DEC CX JNZ NEXT MOV CX,100 ;指定循环指定循环100次次 START ;循环体入口循环体入口 ;循环体;循环体 LOOP START ;CXCX1, ;CX 0时,转移到时,转移到START ;CX0时,从这里继时,从这里继续续见P147 3.15 解:解: LEA SI,BUFFER MOV CX,200 XOR BX,BXAGAIN:MOV AL,SI CMP AL,0 JN
11、E GOON INC BXGOON: INC SI LOOP AGAIN HLT试编写程序,统计试编写程序,统计BUFFER为起始地址的连续为起始地址的连续200个单元中个单元中0的个数。的个数。(2) LOOPE/LOOPZ 指令指令 格式:格式:LOOPE/LOOPZ LABEL 执行操作:执行操作: (CX)(CX)1, CX 0且且ZF=1,继续循环,继续循环 CX=0 或或ZF=0,退出循环,退出循环 (3) LOOPNE/LOOPNZ 指令指令 格式:格式:LOOPNE/LOOPNZ LABEL 执行操作:执行操作: (CX)(CX)1, CX 0且且ZF=0,继续循环,继续循环
12、CX=0 或或ZF=1,退出循环,退出循环 举例举例 例例1:统计以:统计以BUFFER为起始地址的为起始地址的100个单元中负数的个数,并将统计出来的个单元中负数的个数,并将统计出来的负数个数送负数个数送NUM单元。单元。 XOR BL,BL ;存放负数的个数存放负数的个数 MOV CX,100 ;循环次数;循环次数 LEA SI,BUFFER ;取偏移地址,指针取偏移地址,指针 CLD ;DF=0 NEXT: LODSB ;取一个数;取一个数 TEST AL,80H ;是负数吗?;是负数吗? JZ GOON ;否;否 INC BL ;是负数,计数器加;是负数,计数器加1GOON:LOOP
13、NEXT;(CX)-1,若若CX 0则循环则循环 MOV NUM,BL ;保存负数个数保存负数个数 例例2:设有一:设有一ASCII码字符串,其长度为码字符串,其长度为N,首地址首地址为为STRING,要在其字符串中找出有没有字符要在其字符串中找出有没有字符“#”。 MOV SI,OFFSET STRING MOV CX,N MOV AL,#NEXT:CMP AL,SI INC SI LOOPNZ NEXT4. 过程调用过程调用CALL和返回和返回(1)程序中具有相同功能的部分通常以)程序中具有相同功能的部分通常以子程序(过程)子程序(过程)形式出形式出现。主程序再需要时直接调用即可。现。主程
14、序再需要时直接调用即可。(2)程序调用指令:无条件转移到目标地址去执行一个子程序,)程序调用指令:无条件转移到目标地址去执行一个子程序,且子程序执行完后,仍回到且子程序执行完后,仍回到CALL的下一条指令继续执行原程的下一条指令继续执行原程序。序。(3)调用指令)调用指令CALL执行时,执行时,CPU先将下一条指令的地址压入先将下一条指令的地址压入堆栈保存,然后将子程序入口地址送入堆栈保存,然后将子程序入口地址送入IP(或(或CS:IP),转),转去去执行子程序,子程序执行完后将栈顶内容返回给执行子程序,子程序执行完后将栈顶内容返回给IP(或(或CS:IP)主主程程序序子子程程序序调调用用返返
15、回回返回指令返回指令返返回回 、 、 、调用指令调用指令 、 、 、调调用用 主主程程序序子子程程序序 、n过程名过程名 ( 子程序名子程序名 ) :第一条指令的地址。第一条指令的地址。n子程序、主程序可在同一段内,也可不在同子程序、主程序可在同一段内,也可不在同一段内,同一段内,同JMP指令一样,也有四种形式。指令一样,也有四种形式。n返回指令执行与返回指令执行与CALL指令相反的操作。指令相反的操作。过程定义方法过程定义方法符号名符号名 PROC 类类型型 、 、 RET符号名符号名 ENDP 例例:display PROC near 、 、 RET display ENDP按按过过程程与
16、与调调用用语语句句间间的的位位置置,过过程程有有两两种种类类型型:NEAR类型:调用指令与过程在同一个段中。类型:调用指令与过程在同一个段中。FAR类型:调用指令与过程不在同一个段中。类型:调用指令与过程不在同一个段中。调用指令调用指令CALL(1 1)段内直接调用段内直接调用格式:格式: CALL NEAR PROC CALL NEAR PROC ;NEARNEAR属性属性执行:执行: (SPSP) (SPSP)- 2- 2 (IPIP) (IPIP)+16+16位偏移量位偏移量 其中:其中:PROCPROC为近过程符号地址,在当前代码段内。为近过程符号地址,在当前代码段内。 NEARNEA
17、R可忽略。可忽略。例例: NEAR 类型过程类型过程 (调用指令与过程调用指令与过程在同一个段中在同一个段中) CODE SEGMENT ;code段段 CALL SUB ;调用;调用 SUB PROC NEAR ;过程定义;过程定义 RET ;返回;返回 SUB ENDP CODE ENDS (2)段内间接调用)段内间接调用格式:格式:CALL reg16/mem16OPRD为为16位寄存器或存储器操作数位寄存器或存储器操作数 例:例: CALL BX 设(设(BX)=1234H,则(则(IP)=1234H CALL WORD PTR 1000H 设(设(DS)=5200H,(,(53000
18、H)=11H (53001H)=22H, 则(则(IP)=2211H(3)段间直接调用段间直接调用格式:格式: CALL FAR 符号地址符号地址FAR 类型过程:调用指令与过程不在同类型过程:调用指令与过程不在同一个段中。一个段中。例:例:CALL 3000H:2100H则(则(CS)=3000H,(,(IP)=2100H 例例: code1 SEGMENT ;code1段段 CALL FAR display ;调用;调用 code1 ENDS code2 SEGMENT ;code2段段 display PROC FAR ;过程定义;过程定义 RET ;返回;返回 display ENDP
19、 code2 ENDS (4)段间间接调用段间间接调用n格式:CALL mem32例:CALL DWORD PTR DI 设(DS)=6000H, (DI)=4000H则(CS)=4433H, (IP)=2211H11H22H33H44H64000H返回指令返回指令RETl子程序的最后一条指令为子程序的最后一条指令为RET,执行与,执行与CALL指令指令相反的操作。相反的操作。 l功能:从栈顶弹出返回地址,如为段内返回,则弹功能:从栈顶弹出返回地址,如为段内返回,则弹出一个字给出一个字给IP;如为段间返回,则先弹出一个字;如为段间返回,则先弹出一个字给给IP,再弹出一个字给,再弹出一个字给CS
20、。l注:注:CALL指令与指令与RET指令要成对配合使用。指令要成对配合使用。5.5.中断指令中断指令 硬件中断 非屏蔽中断(NMI) 可屏蔽中断(INTR:IF) 软件中断:中断指令引起的(INT n)n8086可处理可处理256种类型的中断,为了对各种中断种类型的中断,为了对各种中断加以区别,规定每个中断对应一个中断类型码加以区别,规定每个中断对应一个中断类型码(0-255)。nINT n (n为中断类型码为中断类型码)n中断地址:中断服务子程序的入口地址,称为中断地址:中断服务子程序的入口地址,称为中中断向量断向量,包括包括段地址、偏移地址。段地址、偏移地址。类型类型N的中断向量固定存放
21、在的中断向量固定存放在4个内存单元中,即:个内存单元中,即: ( 0 : N4 0 : N4 + 3 )偏移偏移地址地址段段地址地址0:N40:N42中断子程序中断子程序N的入口地的入口地址在内存中的位置址在内存中的位置其中:前两个单元存放偏移地址其中:前两个单元存放偏移地址 后两个单元存放段地址后两个单元存放段地址 格格 式式 : INT N ; 其其 中中 N=0 FFH(0255) 执执行行:标标志志寄寄存存器器、INT指指令令的的下下一一条条指指令令地址的地址的CS、IP依次入栈依次入栈 中断返回指令中断返回指令IRETl格式:格式: IRETl中断返回时:恢复(中断返回时:恢复(IP
22、)、()、(CS)及(及(PSW)l执行:执行: 将栈顶内容依次弹出到将栈顶内容依次弹出到IP、CS及标志及标志 寄存器中寄存器中l任何中断服务子程序最后一条指令都是任何中断服务子程序最后一条指令都是IRET指令。指令。中断类型中断类型功能功能类型类型0除数为除数为0中断例行程序中断例行程序类型类型1单步单步类型类型2非屏蔽中断,非屏蔽中断, NMI类型类型3设置断点设置断点类型类型4溢出处理中断,溢出处理中断,INTO指令指令类型类型10显示设备中断显示设备中断类型类型20程序结束中断程序结束中断类型类型21DOS系统功能调用功能程序系统功能调用功能程序中断类型(见中断类型(见P354 附录
23、附录D)3. 6 处理器控制指令1、 标志处理指令标志处理指令设置和清除标志的指令,只影响指令指设置和清除标志的指令,只影响指令指定的标志。定的标志。2、外部同步指令、外部同步指令u暂停指令暂停指令HLT使程序停止执行,处理器进入暂停状态。使程序停止执行,处理器进入暂停状态。u处理器脱离指令处理器脱离指令ESCu处理器等待指令处理器等待指令WAITu总线锁定指令总线锁定指令LOCKu空操作指令空操作指令NOP一是可以延时,二是调试程序时使用。一是可以延时,二是调试程序时使用。微机原理及应用实验安排微机原理及应用实验安排机械机械08-1w第第14周周五周周五5、6、7、8节节w第第15周周五周周
24、五5、6、7、8节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械机械08-2w第第14周周四周周四3、4节节w第第14周周五周周五3、4节节w第第15周周五周周五1、2、3、4节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械机械08-3w第第14周周二周周二1、2节节w第第14周周三周周三1、2节节w第第15周周四周周四3、4、5、6节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械机械08-4w第第14周周一周周一5、6、7、8
25、节节w第第14周周六周周六1、2、3、4节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械机械08-5w第第15周周一周周一5、6、7、8节节w第第15周周三周周三5、6、7、8节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械(高职)机械(高职)08-1w第第16周周六周周六1、2、3、4节节w第第16周周日周周日1、2、3、4节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排机械(高职)机械(高职)08-2w第第13周周三周周三5、6
26、、7、8节节w第第13周周六周周六1、2、3、4节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房微机原理及应用实验安排微机原理及应用实验安排汽车汽车08-1w第第15周周一周周一1、2、3、4节节w第第15周周二周周二5、6、7、8节节地点:工程训练中心一楼机房地点:工程训练中心一楼机房创新设计与制作综合实验创新设计与制作综合实验机械机械08-5第第12周周一周周一5、6节节第第12周周二周周二1、2节节第第12周周三周周三1、2、3、4、5、6、7、8节节第第12周周四周周四5、6节节第第12周周五周周五3、4、5、6、7、8节节第第12周周六周周六1、2、3、4、5、6、7、8节节第第12周周日周周日1、2、3、4节节创新设计与制作综合实验创新设计与制作综合实验机械机械08-5第第13周周一周周一5、6、7、8节节第第13周周二周周二1、2节节第第12周周三周周三1、2、3、4节节第第13周周四周周四5、6节节第第13周周五周周五3、4、5、6、7、8节节