2012-11-21 66 views
3

我試圖將我的C代碼轉換成彙編而不使用gcc -S函數,因爲我想自己練習彙編。出於某種原因,我不能讓我的程序集文件匹配我的C代碼,我找不到原因。這是我寫的,C代碼是正確的,但彙編代碼不能編譯。這是sparc程序集順便說一句。C到彙編轉換問題

#include <stdio.h> 

int charCompare(const void *ptr1, const void *ptr2) 
{ 
    char i = *((char *)ptr1); 
    char j = *((char *)ptr2); 

    if (i > j) 
     return (1); 
    if (i < j) 
     return (-1); 
    return (0); 
} 

這裏是所謂的等效彙編代碼。

.global  charCompare  !makes the function globally usable 
.section  ".text" 

charCompare: 
save %sp, -96, %sp !save caller's window; if different than -96 
cmp i1, i2  !compare i1 with i2 
bg returnpos !if i1 is greater than i2 jump to returntrue 
cmp i1, i2  !compare i1 with i2 
bl returnneg 


returnneg: 
set -1, %o0 
ba end 

returnpos: 
set 1, %o0 
ba end 

end: 
ret 
restore 
+2

什麼是錯誤? – Linuxios

+0

以及我正在運行一個makefile文件,以及其他文件,由於某種原因與c文件編譯,但與它出現錯誤。 –

+0

你會得到什麼錯誤? – Linuxios

回答

1

嘗試使用這個命令:

gcc -S -O0 myfile.c 

這額外的gcc的選項將關閉所有的優化(如那些可以重新安排你的代碼)。

+0

從程序集看,它看起來沒有發生任何優化。 –

+0

您是否閱讀過沒有使用gcc -S **的具體說明**的原始問題部分? –

+0

我假設他使用gcc來檢查他的彙編代碼(因此「理應正確」的部分)。我明白你現在說的話。 –