假设值 4 存储在寄存器“%eax”中(它的 C 变量是“varX”),值 3 存储在寄存器 %edx 中(它的 C 变量是“varY”)。如果汇编代码是“subl %edx, %eax”,那么在 C 中我如何知道指令是否转换为
int varZ = varX - varY;
或者
int varX = varX - varY;
如果第二种情况是正确的,那么什么汇编指令会导致第一种情况为真?
孤立地查看该指令,您可能无法确定目标是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 = ...
。
它也有可能在 中注册varX
,eax
在这种情况下,其sub
本身可能等同于varX = varX - varyY;
,但如果不了解该值的使用方式,则无法确定。