switch語句反彙編
一、switch語句1、在正向編碼時,switch語句可以看做是if語句的簡寫2、break在switch語句的妙用
1、當switch存在3個分支時
二、switch語句的反彙編1、當switch存在3個分支時
2、當switch語句出現四個分支時,編譯器會産生大表
步驟:
1、将傳進來的數先減去1,再進行比較。判斷出該參數是否超過switch語句中最大常量還,即判斷參數是直接進入default中還是進入case中
2、 若參數<=max,則用寄存器保留該值。并代入表達式中,通過大表直接跳到相應的地址
注意
分支少于四個,則switch無意義,編譯器會按if…else…語句進行反彙編
case後的常量的順序不影響大表的生成
将常量值的順序打亂,觀察反彙編代碼
正向代碼
彙編代碼
這裡可以看到大表裡面都是自己排好序了。
将連續的10項中抹去1項或者2項,觀察反彙編有無變化正向代碼是這樣的
這裡可以看到有幾個地址是一樣的
可以發現是指向默認的地址。
3、當switch存在多個分支,常量連續性相對不高時
就會生成小表
步驟:1、将傳進來的參數減去最小值,然後跟最大值相比,如果大于的話就跳到默認的地方,不然就用差值去查小表,然後查大表。
補充:當case後的常量差距較大時編譯器按照if…else…進行反彙編
另外果果為大家帶來了
C/C 的學習基礎教程及相關資源
(僅僅是部分截圖哦)
資料領取方式:
點擊下方“擴展連接”也可以很快找到小編,同更多小夥伴一起交流哦~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!