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;
總結
以上是生活随笔為你收集整理的018-JL,JNGE JLE,JNG JG,JNLE JGE,JNL带符号条件转移指令小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采用scp命令进行FTP数据迁移
- 下一篇: 计算机屏幕的作用是什么情况,电脑屏幕分辨