编译下面所示的代码行(X86)时,会生成相应的汇编指令。895是一个-ve数字,以2的补码形式存储在%esp指定的内存位置。
int a = -895 --> compiler ---> movl $-895, 24(%esp)
我的疑问是,汇编程序是直接将-895转换成2的补码形式并生成机器指令,还是在执行以-895为参数的相应机器指令时CPU的ALU将其存储在内存位置?
最佳答案
装配工做这件事。它很可能首先将895转换成二进制,然后对其求反,结果进入编译代码。很明显,否定出现在CPU中(整个汇编程序的执行也是如此),很可能是一条指令(例如NEG register
)。