1
我有一個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
但是,我想程序生成一個只有下面幾行代碼的程序集文件。
subl %edx, %esi
movl %esi, %eax
sall $31, %eax
sarl $31, %eax
imull %edi, %esi
xorl %esi, %eax
ret
我知道我很接近寫一個程序,它將生成上面提到的代碼。但是,我無能爲力,爲什麼腳本生成不同的彙編代碼。任何方向都會有幫助。
該函數不會返回任何東西。 – Arash
如果您希望它產生* that *代碼,爲什麼要用C代替assembly? –
以獲得明智的asm代碼,打開優化。另一方面,要有合理的優化代碼,提供不會完全優化的代碼(因爲它不返回任何內容,所以完全沒用) – Tommylee2k