控制语句(if-else+循环+switch)汇编规则
生活随笔
收集整理的這篇文章主要介紹了
控制语句(if-else+循环+switch)汇编规则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【1】說說條件碼
最常用的的條件碼有:
- CF:進位標志 (無符號溢出)
- ZF:零標志
- SF:符號標志(結果為負數)
- OF:溢出標志 (補碼溢出, 有符號溢出)
【2】有兩類指令設置條件碼而不改變任何其他寄存器
cmp(cmpb, cmpw, cmpl) + test(testb, testw, testl)You should know
條件傳送指令,如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)汇编规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万网云服务器怎么上传网站(万网云服务器怎
- 下一篇: 过程(栈帧结构是干货)