0

以下に示すコード行をコンパイルすると(X86)、対応するアセンブリ命令が生成されます。895は-ve番号であり、%espが指すメモリ位置に2の補数形式で格納されます。

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

私の疑問は、アセンブラが-895を2の補数形式に直接変換してマシン命令を生成するのか、それとも引数として-895を使用して対応するマシン命令を実行しながらCPUのALUを実行し、メモリ位置に格納するのかということです。

4

2 に答える 2

6

もちろん、それはコンパイル (アセンブリ) 時に発生しmovlますmovl

于 2013-01-26T14:40:48.920 に答える
2

アセンブラがそれを行います。ほとんどの場合、最初に895をバイナリに変換してからそれを否定し、結果はコンパイルされたコードに入ります。否定は明らかにCPUで発生し(アセンブラ全体の実行と同様)、おそらく単一の命令(eg NEG register)として発生します。

于 2013-01-26T14:41:44.517 に答える