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,那麼實際的指令又是什麼?是...