我正在阅读一些程序集,我很确定我有一些逻辑上不可能/死代码。这是:
shr %eax
test %eax, %eax
jns 0x[something]
[if body]
[something]
在任何情况下,if-body是否可能被执行?我觉得答案是否定的,但是再一次,编译器不会对此进行优化吗?
为代码中的模糊性道歉,不想添加比提供问题上下文所需的代码更多的代码。如果有更多信息有用,请告诉我。
答案 0 :(得分:2)
除非有来自其他地方的if-body直接分支,否则无法通过jns
到达。 shr
(逻辑右移)指令将始终导致高位(符号位)为零,因此test
和jns
将始终具有相同的行为,无论值是什么{ {1}}开始时使用。
也就是说,在代码中的其他位置进行搜索并查看是否有任何内容跳转到eax
,test
或jnz
,这些都是值得的。如果可以通过另一种方式获得,可能仍然不是死代码。