假设值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;
,但是如果不知道如何使用该值,就无法确定。关于c - 您如何知道汇编指令是否存储在新变量中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19486865/