这个jns是假的吗? x86中的eflag

时间:2017-03-03 18:57:30

标签: assembly x86

我正在阅读一些程序集,我很确定我有一些逻辑上不可能/死代码。这是:

shr       %eax
test      %eax, %eax
jns       0x[something]
[if body]
[something]

在任何情况下,if-body是否可能被执行?我觉得答案是否定的,但是再一次,编译器不会对此进行优化吗?

为代码中的模糊性道歉,不想添加比提供问题上下文所需的代码更多的代码。如果有更多信息有用,请告诉我。

1 个答案:

答案 0 :(得分:2)

除非有来自其他地方的if-body直接分支,否则无法通过jns到达。 shr(逻辑右移)指令将始终导致高位(符号位)为零,因此testjns将始终具有相同的行为,无论值是什么{ {1}}开始时使用。

也就是说,在代码中的其他位置进行搜索并查看是否有任何内容跳转到eaxtestjnz,这些都是值得的。如果可以通过另一种方式获得,可能仍然不是死代码。