《第3章微处理器及其系统-4-3.ppt》由会员分享,可在线阅读,更多相关《第3章微处理器及其系统-4-3.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、指令的分类指令的分类一一 数据传送指令数据传送指令二二 算术运算指令算术运算指令三三 逻辑运算和移位循环类指令逻辑运算和移位循环类指令四四 串操作指令串操作指令五五 程序控制指令程序控制指令六六 处理器控制指令处理器控制指令五五 程序控制指令程序控制指令控制程序的流向:控制程序的流向:1 无条件转移无条件转移2 条件转移条件转移3 循环控制循环控制4 过程调用与返回过程调用与返回5 中断中断F1 无条件转移无条件转移JMP Label1.Label1:相当于相当于goto语句语句 JMP 1025HJMP 1025HJMP 1025HJMP 1025H ;段内直接近转移;段内直接近转移;段内直
2、接近转移;段内直接近转移 JMP 25HJMP 25HJMP 25HJMP 25H ;段内直接短转移;段内直接短转移;段内直接短转移;段内直接短转移 JMP BXJMP BXJMP BXJMP BX ;段内间接转移;段内间接转移;段内间接转移;段内间接转移 JMPJMPJMPJMP 2000:0100H 2000:0100H 2000:0100H 2000:0100H ;段间直接转移;段间直接转移;段间直接转移;段间直接转移 JMP DWORD PTRBX+010AH JMP DWORD PTRBX+010AH JMP DWORD PTRBX+010AH JMP DWORD PTRBX+010
3、AH ;段间间接转移,目标地址存放在;段间间接转移,目标地址存放在;段间间接转移,目标地址存放在;段间间接转移,目标地址存放在DSDSDSDS段从段从段从段从BX+010AHBX+010AHBX+010AHBX+010AH开始的开始的开始的开始的4 4 4 4个存储单元中个存储单元中个存储单元中个存储单元中例:例:条件转移指令可以分为以下几大类:条件转移指令可以分为以下几大类:条件转移指令可以分为以下几大类:条件转移指令可以分为以下几大类:1)1)1)1)、根据单个条件标志的设置情况转移、根据单个条件标志的设置情况转移、根据单个条件标志的设置情况转移、根据单个条件标志的设置情况转移 2)2)2
4、)2)、比较两个无符号数、比较两个无符号数、比较两个无符号数、比较两个无符号数 3)3)3)3)、比较两个带符号数、比较两个带符号数、比较两个带符号数、比较两个带符号数 4)4)4)4)、CXCXCXCX寄存器值判断寄存器值判断寄存器值判断寄存器值判断 F2 条件转移指令条件转移指令根据执行上一指令后标志寄存器的状态而根据执行上一指令后标志寄存器的状态而决定是否转移决定是否转移JZ/JE OPRJZ/JE OPR ;结果为;结果为;结果为;结果为0 0或相等,则转移或相等,则转移或相等,则转移或相等,则转移 ZF=1ZF=1JNZ/JNE OPRJNZ/JNE OPR ;结果不为;结果不为;结
5、果不为;结果不为0 0或不相等,则转移或不相等,则转移或不相等,则转移或不相等,则转移ZF=0ZF=0JS OPRJS OPR ;结果为负,则转移;结果为负,则转移;结果为负,则转移;结果为负,则转移 SF=1SF=1 JNS OPR JNS OPR ;结果为正,则转移;结果为正,则转移;结果为正,则转移;结果为正,则转移 SF=0 SF=0 1)、根据单个条件标志的设置情况转移、根据单个条件标志的设置情况转移JO OPRJO OPR ;溢出,则转移溢出,则转移溢出,则转移溢出,则转移 OF=1OF=1JNO OPR JNO OPR ;不溢出,则转移不溢出,则转移不溢出,则转移不溢出,则转移
6、OF=0OF=0JP/JPE OPR JP/JPE OPR ;奇偶位为奇偶位为奇偶位为奇偶位为1 1,则转移,则转移,则转移,则转移 PF=1 PF=1 JNP/JPO OPR JNP/JPO OPR ;奇偶位为奇偶位为奇偶位为奇偶位为0 0,则转移,则转移,则转移,则转移 PF=0PF=0JC OPRJC OPR ;低于低于低于低于(不高于也不等于不高于也不等于不高于也不等于不高于也不等于)或或或或进位为进位为进位为进位为1 1,则转移,则转移,则转移,则转移 CF=1CF=1 JNC OPRJNC OPR ;不低于不低于不低于不低于(高于或等于高于或等于高于或等于高于或等于)或或或或进位为
7、进位为进位为进位为0 0,则转移,则转移,则转移,则转移 CF=0CF=0JB/JNAE/JB/JNAE/JC JC OPR OPR;()(=)(=)不低于,高于或等于,或进位不低于,高于或等于,或进位不低于,高于或等于,或进位不低于,高于或等于,或进位CF=0CF=0,则转移,则转移,则转移,则转移 JBE/JNA OPRJBE/JNA OPR ;(=)()()不低于也不等于,高于,则转移不低于也不等于,高于,则转移不低于也不等于,高于,则转移不低于也不等于,高于,则转移 CF=0CF=0且且且且ZF=0ZF=02)2)、比较两个无符号数、比较两个无符号数3)3)、比较两个带符号数、比较两个
8、带符号数JL/JNGE OPR;JL/JNGE OPR;()()小于,不大于也不等于,则转移小于,不大于也不等于,则转移小于,不大于也不等于,则转移小于,不大于也不等于,则转移 SFSF OF=1OF=1且且且且ZF=0ZF=0JLE/JNG OPR JLE/JNG OPR;(=);(=)(=)不小于,大于或等于,则转移不小于,大于或等于,则转移不小于,大于或等于,则转移不小于,大于或等于,则转移 SFSF OF=0OF=0或或或或ZF=1ZF=1JNLE/JG OPR JNLE/JG OPR;();()不小于也不等于,大于,则转不小于也不等于,大于,则转不小于也不等于,大于,则转不小于也不等
9、于,大于,则转移移移移 (SF(SF OF=0)OF=0)且且且且ZF=0ZF=0 4)4)、CXCX寄存器值判断寄存器值判断JCXZ OPR;根据根据CX内容修改情况产生不同的分支。内容修改情况产生不同的分支。CX值为值为0,则转移,则转移说明说明(1(1)比较两个数的大小后转移,要看是)比较两个数的大小后转移,要看是有符号数还是无符号数。无符号数用有符号数还是无符号数。无符号数用“高于高于”和和“低于低于”来判断,有符号数用来判断,有符号数用“大于大于”和和“小于小于”来判断。来判断。(2(2)大部分可以用两种助记符表示。)大部分可以用两种助记符表示。(3)8086的条件转移指令寻址的条件
10、转移指令寻址段内短转移段内短转移。的。的转移范围:与转移指令的字节距离转移范围:与转移指令的字节距离-128+127 CMP AX,0HJNZ L2JMP L1L2:xxxx1L1:xxxxxxxCMP AX,0HJZ L1xxxx1L1:xxxxxxx距离超过距离超过127F3 循环控制循环控制与与与与CXCXCXCX配合使用,配合使用,配合使用,配合使用,循环次数循环次数循环次数循环次数由由由由CXCXCXCX寄存器寄存器寄存器寄存器指定。指定。指定。指定。指令所控制的指令所控制的指令所控制的指令所控制的目的地址目的地址目的地址目的地址都是都是都是都是-128-+127-128-+127范
11、围范围范围范围内。内。内。内。该该该该类类类类指令主要有以下三种:指令主要有以下三种:指令主要有以下三种:指令主要有以下三种:1)1)1)1)、LOOPLOOPLOOPLOOP循环指令循环指令循环指令循环指令 2)2)2)2)、LOOPZ/LOOPELOOPZ/LOOPELOOPZ/LOOPELOOPZ/LOOPE指令指令指令指令 3)3)3)3)、LOOPNZ/LOOPNELOOPNZ/LOOPNELOOPNZ/LOOPNELOOPNZ/LOOPNE指令指令指令指令1)1)、LOOP LOOP LABEL;LABEL;先将先将先将先将CXCXCXCX的内容减的内容减的内容减的内容减1 1 1
12、 1,再判断,再判断,再判断,再判断CXCXCXCX中是否为中是否为中是否为中是否为0 0 0 0,为,为,为,为0 0 0 0则则则则退出,否则循环。退出,否则循环。退出,否则循环。退出,否则循环。操作同于:操作同于:操作同于:操作同于:DEC CXDEC CXDEC CXDEC CX JNZ JNZ JNZ JNZ 符号地址符号地址符号地址符号地址 2)LOOPZ/LOOPE OPR;先将先将先将先将CXCXCXCX的内容减的内容减的内容减的内容减1 1 1 1,再判断,再判断,再判断,再判断CXCXCXCX中是否为中是否为中是否为中是否为0 0 0 0,并且,并且,并且,并且判断判断判断
13、判断ZFZFZFZF是否为是否为是否为是否为1 1 1 1。如果。如果。如果。如果ZF=0ZF=0ZF=0ZF=0,或,或,或,或CX=0CX=0CX=0CX=0,则退出;则退出;则退出;则退出;只有在只有在只有在只有在ZF=1ZF=1ZF=1ZF=1并且并且并且并且CX0CX0CX0CX0情况下,才继续循环。情况下,才继续循环。情况下,才继续循环。情况下,才继续循环。指令说明:指令说明:指令说明:指令说明:(1 1 1 1)CXCXCXCX中的值为中的值为中的值为中的值为0 0 0 0时,并不会影响标志位时,并不会影响标志位时,并不会影响标志位时,并不会影响标志位ZFZFZFZF,ZFZFZ
14、FZF由前面其它指令来决定由前面其它指令来决定由前面其它指令来决定由前面其它指令来决定(2 2 2 2)该指令可用于查找相等的情况。)该指令可用于查找相等的情况。)该指令可用于查找相等的情况。)该指令可用于查找相等的情况。3)LOOPNZ/LOOPNE OPR;先将先将先将先将CXCXCXCX的内容减的内容减的内容减的内容减1 1 1 1,再判断,再判断,再判断,再判断CXCXCXCX中是否为中是否为中是否为中是否为0 0 0 0,并且,并且,并且,并且判断判断判断判断ZFZFZFZF是否为是否为是否为是否为1 1 1 1。如果。如果。如果。如果ZF=0,ZF=0,ZF=0,ZF=0,并且并且
15、并且并且CX0CX0CX0CX0,则继则继则继则继续循环;只有在续循环;只有在续循环;只有在续循环;只有在CX=0CX=0CX=0CX=0,或,或,或,或ZF=1ZF=1ZF=1ZF=1情况下,则退出情况下,则退出情况下,则退出情况下,则退出循环。循环。循环。循环。指令说明:指令说明:指令说明:指令说明:(1 1 1 1)CXCXCXCX中的值为中的值为中的值为中的值为0 0 0 0时,并不会影响标志位时,并不会影响标志位时,并不会影响标志位时,并不会影响标志位ZFZFZFZF,ZFZFZFZF由前面其它指令来决定。由前面其它指令来决定。由前面其它指令来决定。由前面其它指令来决定。(2 2 2
16、 2)该指令用于查找不相等的情况。)该指令用于查找不相等的情况。)该指令用于查找不相等的情况。)该指令用于查找不相等的情况。1 1)、过程调用指令:)、过程调用指令:CALLCALL2 2)、过程返回指令:)、过程返回指令:RETRETF4 过程调用与返回过程调用与返回子程序调用和返回指令都不影响标志位。子程序调用和返回指令都不影响标志位。程序中某些具有独立功能的部分编写成独立的程序程序中某些具有独立功能的部分编写成独立的程序模块,称之为过程或子程序。模块,称之为过程或子程序。1 1)、过程调用指令)、过程调用指令例:例:CALL 1234HCALL 1234H ;段内直接调用;段内直接调用;
17、段内直接调用;段内直接调用 CALL BXCALL BX ;段内间接调用;段内间接调用;段内间接调用;段内间接调用 CALL 3000HCALL 3000H:0005H0005H ;段间直接调用;段间直接调用;段间直接调用;段间直接调用 CALL DWORD PTRDICALL DWORD PTRDI ;段间间接调用;段间间接调用;段间间接调用;段间间接调用格式:格式:CALL 过程过程注意:没有直接短转移。注意:没有直接短转移。调用指令与转移指令的比较调用指令与转移指令的比较用于调用一个子过程用于调用一个子过程用于调用一个子过程用于调用一个子过程调用前须保护断点地址调用前须保护断点地址调用前
18、须保护断点地址调用前须保护断点地址子过程执行结束后要返回原调用处继续执行原子过程执行结束后要返回原调用处继续执行原子过程执行结束后要返回原调用处继续执行原子过程执行结束后要返回原调用处继续执行原程序程序程序程序断点断点恢复恢复调用指令在执行时,会调用指令在执行时,会调用指令在执行时,会调用指令在执行时,会把下一把下一把下一把下一条指令的地址推入堆栈条指令的地址推入堆栈条指令的地址推入堆栈条指令的地址推入堆栈,这个,这个,这个,这个地址叫地址叫地址叫地址叫返回地址返回地址返回地址返回地址。在段内调用。在段内调用。在段内调用。在段内调用的情况下,只把返回地址的偏的情况下,只把返回地址的偏的情况下,
19、只把返回地址的偏的情况下,只把返回地址的偏移量推入堆栈,在段间调用的移量推入堆栈,在段间调用的移量推入堆栈,在段间调用的移量推入堆栈,在段间调用的情况下,把返回地址的段地址情况下,把返回地址的段地址情况下,把返回地址的段地址情况下,把返回地址的段地址和偏移量都推入堆栈。和偏移量都推入堆栈。和偏移量都推入堆栈。和偏移量都推入堆栈。断点断点入口入口地址地址调用指令的执行过程调用指令的执行过程将调用指令的下一条指令的地址(断点)压入将调用指令的下一条指令的地址(断点)压入将调用指令的下一条指令的地址(断点)压入将调用指令的下一条指令的地址(断点)压入堆栈堆栈堆栈堆栈获取子过程的入口地址(子过程第获取
20、子过程的入口地址(子过程第获取子过程的入口地址(子过程第获取子过程的入口地址(子过程第1 1 1 1条指令的条指令的条指令的条指令的偏移地址)偏移地址)偏移地址)偏移地址)(执行子过程,含相应参数的保存及恢复)(执行子过程,含相应参数的保存及恢复)(执行子过程,含相应参数的保存及恢复)(执行子过程,含相应参数的保存及恢复)将断点偏移地址由堆栈弹出,返回原程序将断点偏移地址由堆栈弹出,返回原程序将断点偏移地址由堆栈弹出,返回原程序将断点偏移地址由堆栈弹出,返回原程序该该该该指令有以下两条:指令有以下两条:指令有以下两条:指令有以下两条:1 1 1 1、子程序返回指令、子程序返回指令、子程序返回指
21、令、子程序返回指令 RETRETRETRET 2 2 2 2、带参数的返回指令:、带参数的返回指令:、带参数的返回指令:、带参数的返回指令:RET nRET nRET nRET n 所有返回指令都不影响标志位所有返回指令都不影响标志位所有返回指令都不影响标志位所有返回指令都不影响标志位2)、过程返回指令)、过程返回指令1 1、过程返回指令、过程返回指令RET(IP)(SP)+1,(SP)(IP)(SP)+1,(SP)(SP)(SP)+2(SP)(SP)+2返回指令返回指令返回指令返回指令RETRET作为子程序的最后一条指令用来返回作为子程序的最后一条指令用来返回作为子程序的最后一条指令用来返回
22、作为子程序的最后一条指令用来返回高一层的程序。高一层的程序。高一层的程序。高一层的程序。执行时,会从堆栈顶部弹出返回地址出栈送执行时,会从堆栈顶部弹出返回地址出栈送执行时,会从堆栈顶部弹出返回地址出栈送执行时,会从堆栈顶部弹出返回地址出栈送IPIP寄存寄存寄存寄存器器器器 (段内或段间段内或段间段内或段间段内或段间)和和和和CSCS寄存器寄存器寄存器寄存器(段间段间段间段间)。80868086指令系统中,段内返回指令和段间返回指令指令系统中,段内返回指令和段间返回指令指令系统中,段内返回指令和段间返回指令指令系统中,段内返回指令和段间返回指令形式是一样的。不影响标志位形式是一样的。不影响标志位
23、形式是一样的。不影响标志位形式是一样的。不影响标志位2 2、带参数的返回指令、带参数的返回指令n n n n可以表示为可以表示为可以表示为可以表示为0-FFFFH0-FFFFH0-FFFFH0-FFFFH范围中的任何一个偶数。范围中的任何一个偶数。范围中的任何一个偶数。范围中的任何一个偶数。(IP)(SP)+1,(SP)(IP)(SP)+1,(SP)(SP)(SP)+2 (SP)(SP)+2 (SP)(SP)+n(SP)(SP)+n格式:格式:RET nN为中断类型码,为中断类型码,N=0255,调用调用N型中断的型中断的中断服务程序中断服务程序F5 中断调用中断调用调用:调用:INT N返回
24、:返回:IRET六、处理器控制指令六、处理器控制指令1、标志操作指令、标志操作指令2、外同步指令、外同步指令3、空操作、空操作 STC STC ;CF=1CF=1 CLC CLC ;CF=0CF=0 CMC CMC ;将将将将CFCF取反取反取反取反 STD STD ;将方向标志;将方向标志;将方向标志;将方向标志DFDF设为设为设为设为1 1 CLD CLD ;DF=0DF=0 STI STI ;IF=1IF=1 CLI CLI ;IF=0IF=01、标志操作指令、标志操作指令2、外同步指令、外同步指令 HLT ;暂停指令;暂停指令 WAIT ;等待指令;等待指令 ESC ;交权指令;交权指令 LOCK ;封锁总线;封锁总线3、空操作、空操作 NOP3.X86系列微处理器指令系统的发展系列微处理器指令系统的发展基本指令集8086/8088116条指令条指令基本指令集增强指令集系统控制指令集保护模式实模式Pentium306条指令条指令