控制語句(if-else+迴圈+switch)彙編規則
【1】說說條件碼
最常用的的條件碼有:
- CF:進位標誌 (無符號溢位)
- ZF:零標誌
- SF:符號標誌(結果為負數)
- OF:溢位標誌 (補碼溢位, 有符號溢位)
【2】有兩類指令設定條件碼而不改變任何其他暫存器
cmp(cmpb, cmpw, cmpl) + test(testb, testw, testl)
You should know
- if-else + 迴圈(while + for + do-while ) + switch , 都是以跳轉指令為基礎的。
- switch 的重點在於使用了 稱為 “跳轉表”的一個數據結構。
條件傳送指令,如cmovl (contidional mov less )
【3】跳轉指令及其編碼(jmp 及其 jmp編碼)
804828f : 74 05 ;je XXXXXX=0x05+0x8048291=0x8048296
(也即jmp編碼後的程式碼儲存的是相對於它下一條指令的偏移地址)-(乾貨)
8048291 : e8 1e 00 00 00 call 80482b4
【4】(if-else+迴圈+switch)彙編規則
4.1)翻譯條件分支if-else(基於條件傳送指令的if-else彙編程式碼)
從上圖中的彙編程式碼,我們可以看到,if-else的彙編規則(乾貨)
- 1)先將變數暫存在registers中;
- 2)彙編計算 if-else 裡面的表示式;
- 3)彙編比較 if-else的條件表示式;
- 4)then ……
4.2)迴圈( do-while + while + for )
4.2.1)do-while 彙編規則
由上圖,我們知道 do-while 迴圈的彙編規則(乾貨)
- 1)暫存變數到registers,並初始化;
- 2)彙編執行迴圈主體
- 3)彙編計算while中的條件表示式的值(true or false);
4.2.2)while 彙編規則
由上圖,我們知道while迴圈的彙編規則(乾貨)
- 1)暫存變數到registers, 並初始化;
- 2)彙編計算條件表示式的值(true or false);
- 3)彙編執行迴圈體;
- 4)再次彙編計算條件表示式的值(true or false);
4.2.3)for 彙編規則
由上圖,我們知道for迴圈的彙編規則如下(乾貨)
- 1)暫存變數到registers, 並初始化;
- 2)彙編計算條件表示式的值(true or false);
- 3)彙編執行迴圈體;
- 4)彙編自增計數值i;
- 5)再次彙編計算條件表示式的值(true or false);
4.3) switch 彙編規則
從上圖中的彙編程式碼,我們可以看到,switch的彙編規則(乾貨)
- 0)仔細看上圖的.L7程式碼的排序,很有韻味;
- 1)用registers來儲存變數;
- 2)判斷n的case索引值偏移量(是否小於等於6):否》跳轉到預設case;是》跳入case的偏移量地址;6是.L7表中表項的最大偏移值,7個表項(100, 101, 102, 103, 104, 105, 106),最大偏移值為6(基地址base=100);
(Attention): switch的(乾貨)就是它使用了一個叫做跳轉表的東西, 而.L7 就是跳轉表;
【5】條件傳送指令
如條件傳送指令 cmovl == contional mov l(字尾)
總的來說,條件資料傳送指令提供了一種用條件控制轉移來實現條件操作的替代策略。
相關推薦
控制語句(if-else+迴圈+switch)彙編規則
【1】說說條件碼 最常用的的條件碼有: CF:進位標誌 (無符號溢位) ZF:零標誌 SF:符號標誌(結果為負數) OF:溢位標誌 (補碼溢位, 有符號溢位) 【2】有兩類指令設定條件
lua學習筆記---流程控制語句(if else)
其實這些在使用熟練之後都無需記錄,目前這些也很熟練了。擔心後面長時間不用lua,忘了基本的格式,所以記錄一下。 if(布林表示式) then --1 elseif(布林表示式)then --2 else --3 end 例子: c=10 if(c>1
JAVA-選擇結構( if else與switch)
邏輯運算子 符號 含義 運算規則 ! 邏輯非, not, 不 求反 && 邏輯與, and, 並且
Java 筆記 之 流程控制語句( if & switch & for & while)
概述 在一個程式執行的過程中,各條語句的執行順序對程式的結果是有直接影響的。也就是說程式的流程對執行結果有直接的影響。所以,我們必須清楚每條語句的執行流程。而且,很多時候我們要通過控制語句的執行順序來實現我們要完成的功能。 分類 順序結構
JS入門基礎(if else 與 switch case / node安裝)
json health 案例 js文件 動作 require 步驟 *** 命令 在 JavaScript 中,為不同的決定來執行不同的動作,我們可使用以下條件語句: if 語句 - 只有當指定條件為 true 時,使用該語句來執行代碼 if...else 語句 - 當條
mysql儲存過程procedure 觸發器trigger 遊標cusor 控制語句(條件,迴圈)
什麼是mysql儲存例程? 儲存例程是儲存在資料庫伺服器中的一組sql語句,通過在查詢中呼叫一個指定的名稱來執行這些sql語句命令. 為什麼要使用mysql儲存過程? 我們都知道應用程式分為兩種,一種是基於web,一種是基於桌面,他們都和資料庫進行互動來完成資料
用於多分支的條件語句(if-else語句)
這裡寫程式碼片 #include<stdio.h> main() { int a,b,max; printf("Input a,b:"); scanf("%d %d",&a,&b); if(a&
Shell版本迴圈語句(if//for/while/case)
if選擇結構 if單分支處理:當“條件成立”時執行命令序列xx,否則,不執行任何操作(只判斷為真) if [條件測試] ; then 命令序列xx fi 示例:檢測/media/cdrom目錄,若不存在則建立 #!/bin/bash
【C++學習筆記】四、C++中的程式結構、輸入輸出以及語句(選擇、迴圈結構)
1.C++程式結構 c++的每個程式單元由三部分組成: (1)預處理指令:#include 和#define (2)全域性宣告:在函式外部對資料型別、函式以及變數的宣告。它的有效範圍是從宣告開始到本程式單位結束。 (3)函式:包含函式首部和函式體,函式體中包含宣告語句和執行語句。
awk 控制語句(if for do while)
在linux awk的 while、do-while和for語句中允許使用break,continue語句來控制流程走向,也允許使用exit這樣的語句來退出。break中斷當前正在執行的迴圈並跳到迴圈外執行下一條語句。if 是流程選擇用法。 awk中,流程控制語句,語法結
選擇 | 迴圈 | 語句(if,if……else,switch,while,for)的理解和使用
一、選擇結構語句 選擇結構語句,字面上理解既然含有選擇,就一定得有相應供其選擇的條件才行。 例如現實世界中我們開車遇到紅綠燈會知道紅燈停,綠燈行,Java中也是如此,有些程式碼必須滿足條件才能被執行。 對一些條件進行判斷,從而來確定執行哪些程式碼的語句,就
《Java從入門到失業》第三章:基礎語法及基本程式結構(3.8):流程控制(選擇語句、if-else語句、switch語句)
3.8流程控制 到此為止,我們已經基本瞭解了Java的基礎語法,會定義不同型別的變數,會命名,會給變數賦值和運算等。接下來,我們需要學會流程控制方面的知識。 3.8.1選擇語句 3.8.1.1if-else語句
Java基礎複習第三天:流程控制語句if()...else、switch() case、do while()、for迴圈()
目錄 第一章 流程控制 1.流程控制的分類 2.死迴圈 3.跳出語句(迴圈控制語句) 4.巢狀迴圈 從下次開始,會盡量會直接懟上程式碼,減少文字 ----------------------------------------------------
Java程式結構、if-else和switch條件選擇、for與while與do-while迴圈及beak和continue控制跳轉語句
Java程式的流程控制 Java流程控制提供了控制程式的基本手段,使得程式能夠按照正確的順序逐步執行,以實現特定的功能。Java流程控制結構分為:順序結構、選擇結構、迴圈結構。 順序結構 Java應用程式都是從main()方法開始執行的。程式一般是按照書寫順序依次向下執行,直
python筆記5-控制流條件語句和迴圈、遍歷語句(if,for,while)
1.條件語句 語法:if 條件表示式:程式碼塊 elif 條件表示式:程式碼塊 else:程式碼塊 if語句的特點,關鍵字if 滿足條件才執行下面的程式碼塊或者elif模組; 必須是以if開頭,可以沒有elif或者else,但不能沒有if
反彙編之流程控制語句的識別(if...else...語句)
if ..... else .... 組合後是一個雙分支結構,兩者間的功能有所不同。從愈發上看,if...else.... 只是比 if 多出了一個 else, else, 有2個功能,如果 if 判斷成功, 則跳過else分支語句塊, 如果,if 判斷失敗,則進入els
Java-Annotation的一種用法(消除程式碼中冗餘的if/else或switch語句)
# Java-Annotation的一種用法(消除程式碼中冗餘的if/else或switch語句) ### 1.冗餘的if/else或switch 有沒有朋友寫過以下的程式碼結構,大量的if/esle判斷,來選擇不同的執行方式 ```java if(type==1001){ return dec
R語言開發之迴圈結構的控制語句(break&next)瞭解下
迴圈控制語句用於更改程式正常執行順序,就是當執行離開範圍時,在該範圍內建立的所有自動物件都將被銷燬。我們來看下R支援的控制語句: 序號 控制語句 描述 1 break語句 終止迴圈語句並將執行轉移到迴圈之後的語句。 2 next語句
Java流程控制語句(順序結構、選擇結構、迴圈結構、隨機方法)
程式三種結構:順序結構,選擇結構,迴圈結構; 一、順序結構 一切從main開始,從上到下,此乃順序結構; 二、選擇結構 1、if(條件表示式)語句 2、if(條件表示式){一條或者多條語句} 3、switc
4、Python_條件判斷(if else input)與迴圈
1、對比java語言中if/else java: if(true){ }else{ } python: if True: print("this is true code") else if False: