[问题] 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