2012-11-21 63 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来检查他的汇编代码(因此“理应正确”的部分)。我明白你现在说的话。 –