0

假设值 4 存储在寄存器“%eax”中(它的 C 变量是“varX”),值 3 存储在寄存器 %edx 中(它的 C 变量是“varY”)。如果汇编代码是“subl %edx, %eax”,那么在 C 中我如何知道指令是否转换为

int varZ = varX - varY;

或者

int varX = varX - varY;

如果第二种情况是正确的,那么什么汇编指令会导致第一种情况为真?

4

1 回答 1

0

孤立地查看该指令,您可能无法确定目标是varX,varZ还是完全其他的东西。

类似的东西int varZ = varX - varY;可能会编译成这样的序列(使用 Intel 而不是 AT&T 语法):

mov eax, varX
sub eax, varY
mov varZ, eax

同样,对于varX = varX - varY;,您可能会得到如下信息:

mov eax, varX
sub eax, varY
mov varX, eax

sub只是给出 和varX的区别varY。如果您将结果存储到varX,那么它正在给予varX = ...,但是如果您将结果存储到varZ,那么它就是给予varZ = ...

它也有可能在 中注册varXeax在这种情况下,其sub本身可能等同于varX = varX - varyY;,但如果不了解该值的使用方式,则无法确定。

于 2013-10-21T05:40:09.930 回答