Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说018-JL,JNGE JLE,JNG JG,JNLE JGE,JNL带符号条件转移指令小结,希望能够帮助你!!!。
l 条件转移指令JG(> 时转移)
l 条件转移指令JNLE(<=时不转移)
l 标志寄存器PSW
标志寄存器PSW(程序状态字寄存器PSW)
标志寄存器PSW是一个16为的寄存器。它反映了CPU运算的状态特征并且存放某些控制标志。8086使用了16位中的9位,包括6个状态标志位和3个控制标志位。
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
|
|
|
|
|
|
|
|
|
零 标志 |
|
|
|
|
|
|
CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。
ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。
SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。
OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=1,否则OF=0
PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0
AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0
另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。
TF跟踪标志:该标志位为方面程序调试而设置。若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。
IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。
DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。
OD里能查看到除IF标志外的 8个标志位
JMP //014
JE/JZ //= //012 Jump if Equl
JNE/JNZ //不= //013
//带符号数条件转移指令
JL /JNGE //不>= //小于 < //015
JLE/JNG //不> //小于等于<= //016
JG/JNLE //不<= //大于 >//017
JGE/JNL //不< //大于等于>= //017
Jump 跳转/转移
Not 不
Equal 相等
Zero 零
Less 小于
Greater大于
一、条件转移指令
助忆符 |
检测的转移条件 |
功能描述 |
|
JE/JZ |
ZF=1 |
Jump Equal == 跳转 |
Jump Zero !=不跳转 |
JNE/JNZ |
ZF=0 |
Jump Not Equal != 跳转 |
Jump Not Zero ==不跳转 |
JG/JNLE |
ZF=0&&SF=OF |
Jump Greater >跳转 |
Jump Not Less or Equal <=不跳转 |
JGE/JNL |
SF=OF |
Jump Greater Equal >=跳转 |
Jump Not Less < 不跳转 |
JL/JNGE |
SF!=OF |
Jump Less <跳转 |
Jump Not Greater or Equal >=不跳转 |
JLE/JNG |
ZF=1 || SF!=OF |
Jump Less or Equal <=跳转 |
Jump Not Greater >不跳转 |
二、代码测试
JE/JZ != 不跳转
JNZ/JNE == 不跳转
JG/JNLE <= 不跳转
JGE/JNL < 不跳转
JL/JNGE >= 不跳转
JLE/JNG > 不跳转
printf("begin\n");
//unsigned
int a=3,b=5;
if (a!=b) //je
if (a==b) //jnz
if (a<=b) //jg
if (a<b) //jge
if (a>=b) //jl
if (a>b)//jle
{
printf("do if");
}
printf("end");
return 0;
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章