《7--控制转移类指.ppt》由会员分享,可在线阅读,更多相关《7--控制转移类指.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、控制转移指令控制转移指令控制转移指令的作用和特点控制转移指令的作用和特点控制转移类指令用于控制控制转移类指令用于控制程序的执行顺序程序的执行顺序,并具有如下特点,并具有如下特点.通过通过修改修改IPIP的内容的内容或或同时修改同时修改CSCS和和IPIP的内容的内容,来改变程序的执行顺序,来改变程序的执行顺序,使之转移到新的目标地址去继续执行。使之转移到新的目标地址去继续执行。除除中断指令中断指令外,其他控制转移指令都不影响外,其他控制转移指令都不影响状态标志位状态标志位。控制转移的类型控制转移的类型按按转移的范围转移的范围来划分。来划分。段内转移段内转移:转移目标地址在:转移目标地址在当前代
2、码段当前代码段内,即内,即当前当前CSCS所指向的代码段所指向的代码段内。此时控制转移指令只修改内。此时控制转移指令只修改IPIP寄存器的内容。寄存器的内容。段间转移段间转移:转移目标地址在:转移目标地址在其他代码段其他代码段内。此时控制转移指令必须同内。此时控制转移指令必须同时修改时修改IPIP和和CSCS寄存器的内容。寄存器的内容。按按转移目标地址的存放位置转移目标地址的存放位置来划分。来划分。直接转移直接转移:转移目标地址直接出现在:转移目标地址直接出现在指令指令中。中。间接转移间接转移:转移目标地址存放在某一:转移目标地址存放在某一寄存器寄存器或或内存单元内存单元中。中。按按转移目标地
3、址的表示方法转移目标地址的表示方法来划分。来划分。绝对转移绝对转移:转移目标地址用:转移目标地址用绝对地址绝对地址来表示。来表示。相对转移相对转移:转移目标地址用:转移目标地址用相对地址相对地址来表示。来表示。(一)无条件转移指令(一)无条件转移指令 (1 1)段内转移)段内转移 在在同一代码段同一代码段的范围内进行的转移称为段内转移。此时,的范围内进行的转移称为段内转移。此时,CPUCPU只需要修改只需要修改IPIP寄存器寄存器的内容。的内容。1)段内直接短转移)段内直接短转移 格式:格式:JMPJMP SHORTSHORT 标号标号 ;标号表示转移目标地址。;标号表示转移目标地址。功能:功
4、能:无条件地转移到无条件地转移到由由标号所指定的转移目标地址标号所指定的转移目标地址处。处。操作:操作:(IPIP)(IPIP)+8 8位位位位移移量量 ;8 8位位位位移移量量由由汇汇编编程程序序按按照照下下式式计计算得出,并存放在算得出,并存放在机器指令代码机器指令代码中。中。8 8位位移量位位移量 =转移目标地址转移目标地址 -当前当前IPIP值(值(JMPJMP指令的下一条指令的地址)指令的下一条指令的地址)说明:说明:8 8位位移量是位位移量是带符号数带符号数,因此跳转的范围为(,因此跳转的范围为(-128-+127)。)。指指令令中中的的转转移移目目标标地地址址用用相相对对于于当当
5、前前IPIP所所指指向向指指令令的的相相对对位位移移量量来来表表示,因此属于示,因此属于相对转移相对转移。例例1:0000H 0000H EB EB 0404jmpjmpshort next short next 0002H0002H B0 B0 0101movmoval,1 al,1 0004H0004H B3 B3 0202mov mov blbl,2,2 0006H0006H B1 03 B1 03next:next:mov clmov cl,3,3 例例2 2:0000H 0000H B0 01B0 01next:next:movmoval,1 al,1 0002H0002H B3 0
6、2 B3 02mov mov blbl,2,2 0004H0004H B1 03 B1 03movmovclcl,3,3 0006H0006H EB F8EB F8jmpjmpshort next short next 0008H0008H B2 04 B2 04movmovdl,4 dl,4 2)段内直接近转移)段内直接近转移 格式:格式:JMP NEAR PTR 标号标号 功能:功能:无条件地转移到无条件地转移到由由标号所指定的目标地址标号所指定的目标地址处。处。操作:操作:当跳转范围可以用当跳转范围可以用8 8位位移量位位移量表示时,该指令同表示时,该指令同 JMP JMP SHORTS
7、HORT 标号标号。(IPIP)(IPIP)+8+8位位移量位位移量 当跳转范围只能用当跳转范围只能用1616位位移量位位移量表示时表示时 (IPIP)(IPIP)+16+16位位移量(由位位移量(由机器指令码机器指令码提供)提供)说明:说明:机器指令码所指定的位移量由汇编程序按照下式计算得出。机器指令码所指定的位移量由汇编程序按照下式计算得出。位移量位移量=转移目标地址转移目标地址 -当前当前IPIP值(值(JMPJMP指令的下一条指令的地址)指令的下一条指令的地址)1616位位移量是位位移量是带符号二进制数带符号二进制数,因此跳转的范围为,因此跳转的范围为 32K。指指令令中中的的转转移移
8、目目标标地地址址用用相相对对于于当当前前IPIP所所指指向向指指令令的的相相对对位位移移量量来来表表示,因此属于示,因此属于相对转移相对转移。用户程序可以忽略用户程序可以忽略运算符运算符SHORTSHORT或者或者NEAR PTRNEAR PTR,直接写成如下格式。,直接写成如下格式。JMP 标号标号汇编程序将自动确定是短转移(汇编程序将自动确定是短转移(SHORT),还是近转移(),还是近转移(NEAR PTRNEAR PTR)。)。3)段内间接近转移段内间接近转移 格式:格式:JMP REG JMP WORD PTR MEM 功能:功能:无条件地转移到无条件地转移到由寄存器或存储单元所指定
9、的目标地址由寄存器或存储单元所指定的目标地址。操作:操作:(IPIP)(REG)或或 (MEMMEM)说明:说明:寄存器的内容寄存器的内容 或或存储单元的内容存储单元的内容就是就是转向地址转向地址。必须使用必须使用属性操作符属性操作符WORD PTR来指定来指定存储单元的字长存储单元的字长。该指令该指令使用使用绝对地址绝对地址来表示转移目标地址,来表示转移目标地址,属于属于绝对转移指令绝对转移指令。(2)段间转移指令)段间转移指令 在在不不同同代代码码段段之之间间进进行行的的转转移移称称为为段段间间转转移移,即即转转移移到到另另一一个个代代码码段段中去执行程序。中去执行程序。此此时时,CPU不
10、不仅仅需需要要改改变变IP寄寄存存器器的的内内容容,还还要要修修改改CS段段寄寄存存器器的的内内容容才才能能实实现现段段间间转转移移。因因此此,段段间间转转移移指指令令的的转转移移目目标标地地址址由由新新的的段段地地址址和偏移地址两部分组成。和偏移地址两部分组成。1)段间直接转移)段间直接转移 格式:格式:JMP FAR PTR 标号标号 功能:功能:无条件地转移到无条件地转移到其他代码段内标号其他代码段内标号所指定的目标地址所指定的目标地址处。处。操作:操作:如果标号为如果标号为其它代码段内定义的标号其它代码段内定义的标号,则,则 (IPIP)标号标号的偏移地址的偏移地址 (CSCS)标号的
11、段地址标号的段地址 如果标号为如果标号为本代码段内定义的标号本代码段内定义的标号,则该指令同,则该指令同JMP NEAR PTR lable。说明:说明:也可直接使用也可直接使用数值表达式数值表达式来给出目标地址,这时可省略来给出目标地址,这时可省略FARFAR属性说明。属性说明。JMP JMP 2000H2000H:0100H0100H 机机器器指指令令代代码码直直接接提提供供了了转转向向地地址址的的段段地地址址和和偏偏移移地地址址,属属于于直直接接转转移移方式方式。使用绝对地址来表示使用绝对地址来表示转移目标地址转移目标地址,因此属于,因此属于绝对转移绝对转移。2)段间间接转移)段间间接转
12、移 格式:格式:JMP DWORD PTR MEM 功能:功能:无条件地转移到无条件地转移到存储单元的内容(存储单元的内容(MEMMEM)所指定的目标地址所指定的目标地址处。处。操作:操作:(IPIP)(MEMMEM)(CSCS)(MEMMEM+2+2)说明:说明:存存储储单单元元的的内内容容是是完完整整的的转转向向地地址址(段段地地址址:偏偏移移地地址址),因因此此必必须使用须使用属性操作符属性操作符 DWORD PTR DWORD PTR 来指定存储单元的字长。来指定存储单元的字长。存储单元中的转移目标地址存储单元中的转移目标地址是绝对地址,因此属于是绝对地址,因此属于绝对转移绝对转移。(
13、二)条件转移指令(二)条件转移指令 格式:格式:JccJcc 标号标号 cccc:表示由表示由标志寄存器中的一个标志位或数个标志位标志寄存器中的一个标志位或数个标志位所组成的所组成的测试条测试条件件(转移条件)。(转移条件)。标号标号:转移目标地址。:转移目标地址。功能:功能:根据根据测试条件测试条件cc ,应用程序的执行流程如下。,应用程序的执行流程如下。如果满足测试条件如果满足测试条件cc,则转移到则转移到标号所指定的位置标号所指定的位置处继续执行。处继续执行。如果不满足测试条件如果不满足测试条件cc,则顺序执行则顺序执行下一条指令下一条指令。操作:操作:如果不满足测试条件如果不满足测试条
14、件cc,则该指令不作任何操作。,则该指令不作任何操作。如果满足测试条件如果满足测试条件cc,则,则 (IPIP)(IPIP)+8+8位位移量位位移量 其中的其中的8 8位位移量由位位移量由机器指令代码机器指令代码提供,其大小由汇编程序按下式计算提供,其大小由汇编程序按下式计算得出。得出。位移量位移量 =目标地址目标地址 -当前当前IPIP值(值(JccJcc指令的下一条指令的地址)指令的下一条指令的地址)说明:说明:(1)测试条件不同,指令助记符也各不相同,具体见下表所示。)测试条件不同,指令助记符也各不相同,具体见下表所示。助记符助记符测试条件测试条件指令名称指令名称单单标标志志位位 测测试
15、试转转移移 JZ/JEJZ/JE 标号标号ZF=1ZF=1零(相等)转移指令零(相等)转移指令 JNZ/JNE JNZ/JNE 标号标号ZF=0ZF=0非零(不等)转移指令非零(不等)转移指令 JS JS 标号标号SF=1SF=1负转移指令负转移指令 JNS JNS 标号标号SF=0SF=0正转移指令正转移指令 JO JO 标号标号OF=1OF=1溢出转移指令溢出转移指令 JNO JNO 标号标号OF=0OF=0不溢出转移指令不溢出转移指令 JP/JPE JP/JPE 标号标号PF=1PF=1偶数偶数1 1转移指令转移指令 JNP/JPO JNP/JPO 标号标号PF=0PF=0奇数奇数1 1
16、转移指令转移指令 JC JC 标号标号CF=1CF=1进位转移指令进位转移指令 JNC JNC 标号标号CF=0CF=0无进位转移指令无进位转移指令 助记符助记符测试条件测试条件指令名称指令名称无符号数无符号数比较转移比较转移JA/JNBE JA/JNBE 标号标号CF=0CF=0且且ZF=0ZF=0高于(不低于也不等于)转移指令高于(不低于也不等于)转移指令JAE/JNB JAE/JNB 标号标号CF=0CF=0或或ZF=1ZF=1高于或等于(不低于)转移指令高于或等于(不低于)转移指令JB/JNAE JB/JNAE 标号标号CF=1CF=1且且ZF=0ZF=0低于(不高于也不等于)转移指令
17、低于(不高于也不等于)转移指令JBE/JNA JBE/JNA 标号标号CF=1CF=1或或ZF=1ZF=1低于或等于(不高于)转移指令低于或等于(不高于)转移指令带符号数带符号数比较转移比较转移JG/JNLE JG/JNLE 标号标号SFOF=0SFOF=0且且ZF=0ZF=0大于(不小于也不等于)转移指令大于(不小于也不等于)转移指令JGE/JNL JGE/JNL 标号标号SFOF=0SFOF=0或或ZF=1ZF=1大于或等于(不小于)转移指令大于或等于(不小于)转移指令JL/JNGE JL/JNGE 标号标号SFOF=1SFOF=1且且ZF=0ZF=0小于(不大于也不等于)转移指令小于(不
18、大于也不等于)转移指令JLE/JNG JLE/JNG 标号标号SFOF=1SFOF=1或或ZF=1ZF=1小于或等于(不大于)转移指令小于或等于(不大于)转移指令计数器计数器零转移零转移JCXZ JCXZ 标号标号(CXCX)=0=0CXCX零转移指令零转移指令 (2)条件转移指令分为以下四类。)条件转移指令分为以下四类。单标志位测试转移指令单标志位测试转移指令 通过测试通过测试单个标志位的状态单个标志位的状态来决定是否转移的指令。来决定是否转移的指令。例:例:ADD AX,BXJC LAB1;如果;如果 CF=1,转至,转至 LAB1CMP CX,DXJE LAB2;如果如果 ZF=1,转至
19、,转至 LAB2 无符号数比较转移指令无符号数比较转移指令 该该类类指指令令将将参参与与比比较较的的两两个个数数据据看看作作是是无无符符号号数数,并并根根据据比比较较运运算算后后标志位标志位CF和和ZF的状态的状态来判断它们之间的大小关系,从而决定是否转移。来判断它们之间的大小关系,从而决定是否转移。例:例:MOV AL,01HMOV BL,FFHCMP AL,BLJA LAB1;(;(AL)(BL),),故转移至故转移至 LAB1 CXCX为零转移指令为零转移指令 该该指指令令不不影影响响CXCX的的内内容容,仅仅在在 CX CX=0 0 时时,控控制制转转移移到到目目标标标标号号,否否则则
20、顺序执行下一条指令。顺序执行下一条指令。(3 3)此类指令都是)此类指令都是段内直接短转移段内直接短转移类型,转移范围为类型,转移范围为-128-128 +127+127。(4 4)此类指令一般都紧跟在)此类指令一般都紧跟在算术算术/逻辑运算指令逻辑运算指令的后面,的后面,CPUCPU通过检测通过检测此此次运算所设置的标志位的状态次运算所设置的标志位的状态来判断转移条件是否满足,然后决定程序的执来判断转移条件是否满足,然后决定程序的执行流程。行流程。(5 5)无无论论两两个个数数据据是是无无符符号号数数还还是是带带符符号号数数,测测试试它它们们是是否否相相等等都都可可以以使用使用JZJZ或或J
21、EJE指令指令。(6 6)条条件件转转移移指指令令具具有有丰丰富富的的助助记记符符,我我们们只只要要正正确确理理解解这这些些助助记记符符的的含义就可以在程序中使用了,可以不必关心具体的测试条件和标志位的状态。含义就可以在程序中使用了,可以不必关心具体的测试条件和标志位的状态。(7 7)所有条件转移指令对标志位均无影响。)所有条件转移指令对标志位均无影响。(三)循环控制指令(三)循环控制指令 循环结构循环结构是程序设计中非常重要的一类程序结构。是程序设计中非常重要的一类程序结构。循环结构有多种形式,循环结构有多种形式,下图所示是一种典型的下图所示是一种典型的循环次数已知的循环结构循环次数已知的循
22、环结构。Y YN N(COUNTCOUNT)循环次数循环次数循环体循环体(COUNTCOUNT)(COUNTCOUNT)-1-1(COUNTCOUNT)=0=0?为实现上述形式的循环结构,为实现上述形式的循环结构,8086/80888086/8088提供了一组提供了一组循环控制指令循环控制指令。(1 1)LOOP LOOP 循环指令循环指令 格式:格式:LOOPLOOP 标号标号 操作:操作:下一条指令下一条指令至转向目标地址至转向目标地址Y YN N(CXCX)(CXCX)-1-1(CXCX)=0 0?下一条指令下一条指令(2 2)LOOPZ/LOOPELOOPZ/LOOPE 为零或相等时循
23、环指令为零或相等时循环指令 格式:格式:LOOPZ/LOOPELOOPZ/LOOPE 标号标号操作:操作:N NY Y(CXCX)(CXCX)-1-1(CXCX)0 0 且且 ZFZF=1 =1?至转向目标地址至转向目标地址(3 3)LOOPNZ/LOOPNELOOPNZ/LOOPNE 不为零或不相等时循环指令不为零或不相等时循环指令 格式:格式:LOOPNZ/LOOPNELOOPNZ/LOOPNE 标号标号 操作:操作:下一条指令下一条指令N NY Y(CXCX)(CXCX)-1-1(CXCX)0 0 且且 ZFZF=0 0?到转向地址到转向地址对循环控制指令的说明。对循环控制指令的说明。所有循环控制指令都不影响条件标志位。所有循环控制指令都不影响条件标志位。此类指令都是此类指令都是段内直接短转移段内直接短转移类型,转移范围为类型,转移范围为 -128-128 +127 +127。