013 JNE指令與標誌位 ZF等於

2021-07-22 15:49:28 字數 3072 閱讀 8399

l條件轉移指令

jne/jnz

lzf

(零標誌)

l一、標誌暫存器

psw

1514

1312

111098

7654

3210

ofdf

iftf

sfzf

afpfcf零

標誌標誌暫存器psw(程式狀態字暫存器

psw)

標誌暫存器psw是乙個16為的暫存器。它反映了cpu運算的狀態特徵並且存放某些控制標誌。8086使用了16位中的9位,包括6個狀態標誌位和3個控制標誌位。

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個標誌位

二、不等於轉移指令 jne/jnz (等於je/jz)

1、jne/jnz功能

條件轉移指令jne/jnz  //不等於轉移

格式: jne/jnz 標號

功能: zf=0,轉至標號位址處執行

2、**測試

printf("begin\n");

inta=4;

//if (a==3)//zf=0 //

//printf("zf==0

跳轉\n");

__asm

{     mov

eax,3

subeax,a

//3-4 jz

end;//zf=1

printf("

未跳轉\n");

end:

printf("

跳轉\n");

printf("end\n");

getchar();

00401004  |.  68f4204000   push jne_jnz.004020f4                    ; /format ="begin\n"

00401009  |. ff15 a4204000 call dword ptr ds:[<&msvcr90.printf>]    ; \printf

0040100f  |. 83c4 04       add esp,4

00401012  |. c745 fc 04000>mov dword ptr ss:[ebp-4],4               ;  a=4

00401019  |.  b803000000   mov eax,3                                ;  eax=3

0040101e  |. 2b45 fc       sub eax,dword ptrss:[ebp-4]             ;  3-4 cmp eax,[ebp-4]

00401021  |.  740e         je short jne_jnz.00401031

00401023  |.  68fc204000   push jne_jnz.004020fc                    ; /format = "未跳轉"

00401028  |. ff15 a4204000 call dword ptr ds:[<&msvcr90.printf>]    ; \printf

0040102e  |. 83c4 04       add esp,4

00401031  |> 68 04214000   pushjne_jnz.00402104                    ;/format = "跳轉"

00401036  |. ff15 a4204000 call dword ptr ds:[<&msvcr90.printf>]    ; \printf

0040103c  |.  83c404       add esp,4

0040103f  |.  680c214000   push jne_jnz.0040210c                    ; /format ="end\n"

00401044  |. ff15 a4204000 call dword ptr ds:[<&msvcr90.printf>]    ; \printf

0040104a  |. 83c4 04       add esp,4

0040104d  |. ff15 9c204000 call dword ptr ds:[<&msvcr90.getchar>]   ; msvcr90.getchar

013 靜態與非靜態

一 靜態 static 呼叫 類名.成員名 適用場景 a.你的資源需要全域性享用 共享的時候。b.如果你寫的類需要被當做工具類來使用,典型的工具類 console 靜態類中的成員必須是靜態的。靜態類不能被例項化 因為它只有乙份,例項化就會有很多份 靜態類成員先物件一步進入記憶體中。靜態成員只有在整個...

ARM指令與thumb 指令

1 thumb指令集概述 為相容資料匯流排寬度為16位的應用系統,arm體系結構除了支援執行效率很高的32位arm指令集以外,同時支援16位的thumb指令集。thumb指令集是arm指令集的乙個子集,是針對 密度問題而提出的,它具有16位的 寬度。與等價的32位 相比較,thumb指令集在保留32...

彙編Lea 指令與 Mov 指令

比如你用local在棧上定義了乙個區域性變數localvar,你知道實際的指令是什麼麼?一般都差不多像下面的樣子 push ebp mov esp,ebp sub esp,4 現在棧上就有了4各位元組的空間,這就是你的區域性變數。接下來,你執行mov localvar,4,那麼實際的指令又是什麼?是...