0

当编译如下所示的一行代码(X86)时,会生成相应的汇编指令。895 是一个 -ve 数字,以 2 的补码形式存储在 %esp 指向的内存位置。

 int a = -895  --> compiler ---> movl    $-895, 24(%esp)

我的疑问是,汇编程序是直接将-895 转换为2 的补码形式并生成机器指令,还是CPU 的ALU 在执行以-895 作为参数的相应机器指令时是否并存储在内存位置?

4

2 回答 2

6

当然它发生在编译(汇编)时,否则movl必须生成不只是movl.

于 2013-01-26T14:40:48.920 回答
2

汇编器做到了。它很可能首先将 895 转换为二进制,然后将其取反,结果进入编译代码。取反显然发生在 CPU 中(整个汇编程序的执行也是如此),最有可能作为单个指令(例如NEG register)。

于 2013-01-26T14:41:44.517 回答