018-JL,JNGE JLE,JNG JG,JNLE JGE,JNL带符号条件转移指令小结
l? 條件轉(zhuǎn)移指令JG(>? 時轉(zhuǎn)移)
l? 條件轉(zhuǎn)移指令JNLE(<=時不轉(zhuǎn)移)
?
l? 標(biāo)志寄存器PSW
標(biāo)志寄存器PSW(程序狀態(tài)字寄存器PSW)
?? 標(biāo)志寄存器PSW是一個16為的寄存器。它反映了CPU運算的狀態(tài)特征并且存放某些控制標(biāo)志。8086使用了16位中的9位,包括6個狀態(tài)標(biāo)志位和3個控制標(biāo)志位。
| 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 |
| ? | ? | ? | ? | ? | ? | ? | ? | ? | 零 標(biāo)志 | ? | ? | ? | ? | ? | ? |
?
?
??????????????????
?
?
??
?? CF(進位標(biāo)志位):當(dāng)執(zhí)行一個加法(減法)運算時,最高位產(chǎn)生進位(或借位)時,CF為1,否則為0。
? ?ZF零標(biāo)志位:若當(dāng)前的運算結(jié)果為零,則ZF為1,否則為0。
?? SF符號標(biāo)志位:該標(biāo)志位與運算結(jié)果的最高位相同。即運算結(jié)果為負,則SF為1,否則為0。
? ?OF溢出標(biāo)志位:若運算結(jié)果超出機器能夠表示的范圍稱為溢出,此時OF為1,否則為0。判斷是否溢出的方法是:進行二進制運算時,最高位的進位值與次高位的進位值進行異或運算,若運算結(jié)果為1則表示溢出OF=1,否則OF=0
?? PF奇偶標(biāo)志:當(dāng)運算結(jié)果的最低16位中含1的個數(shù)為偶數(shù)則PF=1否則PF=0
???AF輔助進位標(biāo)志:一個加法(減法)運算結(jié)果的低4位向高4位有進位(或借位)時則AF=1否則AF=0?
?? 另外還有三個控制標(biāo)志位用來控制CPU的操作,可以由程序進行置位和復(fù)位。
?? TF跟蹤標(biāo)志:該標(biāo)志位為方面程序調(diào)試而設(shè)置。若TF=1,8086/8088CPU處于單步工作方式,即在每條指令執(zhí)行結(jié)束后,產(chǎn)生中斷。
? ?IF中斷標(biāo)志位:該標(biāo)志位用來控制CPU是否響應(yīng)可屏蔽中斷。若IF=1則允許中斷,否則禁止中斷。
? ?DF方向標(biāo)志:該標(biāo)志位用來控制串處理指令的處理方向。若DF=1則串處理過程中地址自動遞減,否則自動遞增。
?
OD里能查看到除IF標(biāo)志外的 8個標(biāo)志位
JMP??????????????????????? //014
JE/JZ???? //=??????????????? //012 Jump if Equl
JNE/JNZ? //不=????????????? //013
//帶符號數(shù)條件轉(zhuǎn)移指令
JL /JNGE? //不>=? //小于? <??//015
JLE/JNG? //不>?? //小于等于<=? //016
JG/JNLE?//不<=? //大于??? ?>//017
JGE/JNL?//不<?? //大于等于>=? //017
Jump???? 跳轉(zhuǎn)/轉(zhuǎn)移
Not????? 不
Equal??? 相等
Zero??? 零
Less??? 小于
Greater大于
?
一、條件轉(zhuǎn)移指令
| 助憶符 | 檢測的轉(zhuǎn)移條件 | 功能描述 | ? |
| JE/JZ | ZF=1 | Jump Equal??? == 跳轉(zhuǎn) | Jump Zero??????????????? !=不跳轉(zhuǎn) |
| JNE/JNZ | ZF=0 | Jump Not Equal != 跳轉(zhuǎn) | Jump Not Zero????? ???????==不跳轉(zhuǎn) |
| JG/JNLE | ZF=0&&SF=OF | Jump Greater? ?>跳轉(zhuǎn) | Jump Not Less or Equal??? <=不跳轉(zhuǎn) |
| JGE/JNL | SF=OF | Jump Greater Equal >=跳轉(zhuǎn) | Jump Not Less???????????? <? 不跳轉(zhuǎn) |
| JL/JNGE | SF!=OF | Jump Less ??<跳轉(zhuǎn) | Jump Not Greater or Equal? >=不跳轉(zhuǎn) |
| JLE/JNG | ZF=1 || SF!=OF | Jump Less or Equal? <=跳轉(zhuǎn) | Jump Not Greater?????????? >不跳轉(zhuǎn) |
?
二、代碼測試
???????? ?
???????? JE/JZ????????????? != 不跳轉(zhuǎn)
???????? JNZ/JNE??????????? == 不跳轉(zhuǎn)
???????? JG/JNLE? ?????????<= 不跳轉(zhuǎn)
???????? JGE/JNL????????? ??<? 不跳轉(zhuǎn)
???????? JL/JNGE??????????>= 不跳轉(zhuǎn)
JLE/JNG???????? ???> 不跳轉(zhuǎn)
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;
總結(jié)
以上是生活随笔為你收集整理的018-JL,JNGE JLE,JNG JG,JNLE JGE,JNL带符号条件转移指令小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用scp命令进行FTP数据迁移
- 下一篇: 计算机屏幕的作用是什么情况,电脑屏幕分辨