大家好,欢迎来到IT知识分享网。
程序控制指令又称为控制转移指令,包括:转移指令、循环控制指令、过程调用指令和 中断指令 4 类。转移指令又分为无条件转移指令和条件转移指令。
1.无条件转移指令 JMP
JMP SHORT LABEL,程序转移到 LABEL指明的指令处继续执行。SHORT 为属性说明符, 说明转移范围,以当前 IP 为中心,转移范围-128~+127。
JMP NEAR LABEL,程序转移到 LABEL 指明的指令处继续执行。NEAR 为属性说明符, 说明转移范围,以当前 IP 为中心,转移范围-32768~+32767。
说明:在编程时 NEAR 与 SHORT 通常省略,编译时由汇编程序自己计算。如果用了 NEAR 或 SHORT,在编译时有时会提示不正确的属性限制。所以 JMP LABEL 是最常见 的形式。
由于 LABEL 对应一条指令,是这条指令的符号地址,所以以上三种 JMP 形式又称为 段内直接转移。这些指令在编译时,汇编程序会计算出它的下一条指令到 LABEL 指明的指 令之间的位移量(相距多少字节),将这个位移量编译为 JMP 的操作数。指令执行时 IP 加 上这个位移量(JMP 指令的功能),IP 的值被修改,使得下一条要执行的指令指向 LABEL。
JMP BX,将 BX 的值传送给 IP,程序转移到 CS:IP 处继续执行。操作数可以是所有 16 位 通用寄存器。
JMP WORD PTR[BX+DI],从[BX+DI]指明的内存区域连续取出两个字节传送给 IP,程序转 移到 CS:IP 处继续执行。操作数可以采用各种寻址方式。
以上两种 JMP 形式又称为段内间接转移,编程时要注意操作数必须是 16 位。
2)段间转移
指令格式: JMP OPRD
功能:段间转移,IP←OPRD 的段内偏移地址,CS←OPRD 所在段的段基址。
说明:根据 OPRD 的类型又分为段间直接转移和段间间接转移。指令不影响标志位
例如:
JMP FAR LABEL :程序转移到 LABEL 指明的指令处继续执行,LABEL 为标号。FAR 是 相对于 NEAR 的属性说明符,FAR 说明标号 LABEL 在另外的代码段,与 JMP 指 令本身不在同一段。这条指令执行的操作是 IP←LABEL 的偏移地址,CS←LABEL 所在段的段基址,程序转移到 CS:IP 处继续执行。这种 JMP 形式又称为段间直接转移。
JMP DWORD PTR[BX+DI]:从 [BX+DI]指明的内存区域连续取出 4 个字节,前两个字节(低 地址)传送给 IP,后两个字节送给 CS,程序转移到 CS:IP 处继续执行。操作数属 于存储器操作数,可以采用各种存储器的寻址方式。
2.条件转移指令
条件转移指令先测试条件,若条件成立则执行转移操作;若不成立则不转移并顺序执行 下一条指令。所有的条件转移指令转移范围-128~+127,属于段内短转移,都不影响状态标 志位。
指令名称 | 汇编格式 | 转移条件 | 功能说明 |
---|---|---|---|
进位转移 | JC target | (CF)=1 | 有进位或借位 |
无进位转移 | JNC target | (CF)=0 | 无进位或借位 |
等于或为零转移 | JE/JZ target | (ZF)=1 | 相等或结果为 0 |
不等于或为零转移 | JNE/JNZ target | (ZF)=0 | 不相等或结果为 0 |
奇偶校验为偶转移 | JP/JPE target | (PF)=1 | 有偶数个 1 |
奇偶校验为奇转移 | JP/JPO target | (PF)=0 | 有奇数个 1 |
结果为负转移 | JS target | (SF)=1 | 为负数 |
结果为正转移 | JNS target | (SF)=0 | 为正数 |
溢出转移 | JO target | (OF)=1 | 溢出 |
不溢出转移 | JNO target | (OF)=0 | 不溢出 |
大于则转移 | JA/JNBE target | (CF)=0 且(ZF)=0 | 无符号数 |
大于或等于则转移 | JB/JNAE target | (CF)=0 | 无符号数 |
小于则转移 | JB/JNAE target | (CF)=1 | 无符号数 |
小于或等于则转移 | JAE/JNB target | (CF)=1 或(ZF)=1 | 无符号数 |
CX内容为0转移 | JCXZ target | (CX)=0 | |
大于则转移 | JG/JNLE target | (SF)=(OF)且(ZF)=0 | 带符号数 |
大于或等于则转移 | JGE/JNL target | (SF)=(OF) | 带符号数 |
小于则转移 | JL/JNGE target | (SF)≠(OF)且(ZF)=0 | 带符号数 |
小于或等于则转移 | JLE/JNG target | (SF)≠(OF)或(ZF)=1 | 带符号数 |
例题
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128670.html