[問題] C 轉成 assembly 時 switch 的問題

作者: shi359 (歸人還是過客)   2017-09-30 11:35:07
不確定跟 assembly 相關的問題能不能在這裡問
開發平台(Platform): (Ex: Win10, Linux, ...)
docker ubuntu x86-64
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
在練習 assembly 時發現如果我的 c code 寫成下圖:
https://imgur.com/8bB5u4V.png
用 objdump 的結果會像這樣
https://imgur.com/GK0gnHi.png
想請問為什麼 assembly 會是比較 1, 2 和 default
沒有判斷 a=0 的狀況
而且 0x80483f9 這行會被跳過呢?
謝謝
作者: Schottky (順風相送)   2017-09-30 11:40:00
test eax, eax 就是判斷 eax 是不是 0 了你要這樣玩的話,要了解有些時候 compiler 做一些神妙的最佳化,人類並不容易看懂... 今天這個算最簡單的了...
作者: dmeiki (熊麻吉)   2017-09-30 11:57:00
可以參考csapp 第三章了解一些簡單情況下,組語更動執行順序的行為
作者: james732 (好人超)   2017-09-30 15:39:00
開個最佳化應該會變得很有趣
作者: PkmX (阿貓)   2017-09-30 22:22:00
最佳化開了就什麼都沒有了吧xd

Links booklink

Contact Us: admin [ a t ] ucptt.com