1
私は、関数decodを持つCプログラムを持っていて、その関数は次のようなステートメントを持っています。Cプログラムのアセンブリコード
マイdecode.c
スクリプト:
int decod(int x, int y, int z) {
int ty = y;
ty = ty - z;
int py = ty;
py = py << 31;
py = py >> 31;
ty = ty * x;
py = py^ty;
}
(gcc -S decod.c
によって生成された)このプログラムのアセンブリコードは、次のコードを示しています。
movl %edi, -20(%rbp)
movl %esi, -24(%rbp)
movl %edx, -28(%rbp)
movl -24(%rbp), %eax
movl %eax, -8(%rbp)
movl -28(%rbp), %eax
subl %eax, -8(%rbp)
movl -8(%rbp), %eax
movl %eax, -4(%rbp)
sall $31, -4(%rbp)
sarl $31, -4(%rbp)
movl -8(%rbp), %eax
imull -20(%rbp), %eax
movl %eax, -8(%rbp)
movl -8(%rbp), %eax
xorl %eax, -4(%rbp)
popq %rbp
.cfi_def_cfa 7, 8
ret
ただし、次のコード行のみを含むアセンブリファイルを生成します。
私は、上記のコードを生成するプログラムを書くのにかなり近いと知っています。しかし、なぜスクリプトが異なるアセンブリコードを生成するのか、私は無知です。どんな方向にも役立ちます。
その関数は何も返しません。 – Arash
*その*コードになるようにしたいのであれば、なぜアセンブリではなくC言語で記述していますか? –
、賢明なasmコードを取得するには、最適化をオンにします。一方、合理的な最適化されたコードを提供するには、完全に最適化されないコードを提供してください(何も返さないので完全に無駄です)。 – Tommylee2k