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

int varZ = varX - varY;


要么

int varX = varX - varY;


如果第二种情况正确,那么什么汇编指令会使第一种情况成立?

最佳答案

孤立地查看该指令,您可能无法确定目标是varXvarZ还是其他对象。

类似于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只是给出了varXvarY的区别。如果将结果存储到varX,则表示为varX = ...,但是如果将结果存储到varZ,则表示为varZ = ...

也有可能在varX中注册了eax,在这种情况下,sub本身可能等同于varX = varX - varyY;,但是如果不知道如何使用该值,就无法确定。

关于c - 您如何知道汇编指令是否存储在新变量中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19486865/

10-11 16:34