流程控制語句的識別

2021-07-10 04:04:58 字數 2944 閱讀 3999

if語句

if語句是分支結構的重要組成部分。if語句的功能是先對運算條件進行比較,然後根據比較結果選擇對應的語句塊執行。if語句只能判斷兩種情況:「0」為假值,「非0」為真值。如果為真值,則進入語句塊內執行語句;如果為假值,則跳過if語句塊,繼續執行程式。要注意的是,if語句轉換的條件跳轉指令與if語句的判斷結果是相反的。下面舉例說明:

// c++原始碼說明:if語句結構組成 debug除錯版

if (argc == 0)

// c++原始碼與對應彙編**講解

// c++原始碼對比,比較引數argc等於0,則為真,執行語句塊

if (argc == 0)

; 取argc的值賦值給r3

b6f724d8 ldr r3, [r11,#-8]

使用cmp指令,將r3的值與0相減,結果不影響argc,但影響標記位

b6f724dc cmp r3, #0

; bne檢查標記位z的值,如果值等於0,則跳轉,此時表示argc的值不等於0,

; 於是跳轉到位址0xb6f724f8

; 這個位址為if語句塊的結束位址,隨後跳轉出if語句。

b6f724e0 bne main+52(b6f724f8)

// c++原始碼對比,函式返回。

if…else…語句

按if/else的邏輯,如果滿足if條件,則執行if語句塊;否則執行else語句塊,兩者有且僅有一方會執行。所以,如果編譯器生成的**在000004e0處的跳轉條件成立,則必須到達else塊的**開始處。而000004f8處有個無條件跳轉b,它的作用是繞過else塊,因為如果能執行到這個b,if條件必然成立,對應的反彙編**處的跳轉條件必然不能成立,而且if語句塊已經執行完畢。由此,我們可以利用這裡的兩處跳轉指令作為「指路明燈」,準確劃分if塊和else塊的邊界。

那麼根據以上的規律,可以總結if…else…語句的識別規律如下:

; 先執行影響標誌位的相關指令

bxx    else_begin ; 該位址為else語句塊的首位址

if_begin:

……                    ; if語句塊內的執行**

if_end:

b else_end        ;跳轉到else語句塊的結束位址

else_begin:

……                    ; else語句塊內的執行**

else_end:

Python流程控制語句流程控制語句

流程控制語句1 if語句 if 語句基本用法 if 表示式 語句塊其中,表示式可以是乙個單純的布林值或變數,也可以是比較表示式或邏輯表示式,如果表示式為真,則執行 語句塊 如果表示式的值為假,就跳 過 語句塊 繼續執行後面的語句。2 if else語句 if else 語句基本用法 if 表示式 語...

流程控制語句

for a b c 若迴圈體中出現continue,c語句仍得到執行。while dowhile b 執行完do後大括號,再檢驗while b 條件,若為真,繼續。從而有a語句塊至少執行一次的特性。continue 迴圈體內餘下語句忽略,繼續下次迴圈。break用於跳出迴圈或switch.case....

流程控制語句

迴圈 while do while for 判斷 if else switch case 異常處理 try catch finally throw 分支 break continue label return 迴圈 while和do while語句 while語句用於在條件保持為true時反覆執行乙...