C语言到汇编语言的转换问题

3

我正在尝试将我的C代码转换为汇编代码,但不想使用gcc -S函数来练习汇编。但是出现了问题,汇编文件与C代码不匹配,我无法弄清原因。这是我的代码,C代码是正确的,但汇编代码无法编译。此处使用的是sparc汇编。

#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

我正在运行一个Makefile,其中包括其他文件,但是由于某种原因,C文件可以编译,而S文件则会出现错误。 - Jamie Ford
抱歉,我的 makefile 弄错了,但我已经修复好了,现在应该可以工作了。 - Jamie Ford
1个回答

1
尝试使用这个命令:
gcc -S -O0 myfile.c

那个额外的gcc选项将关闭所有优化(例如可以重新排列代码的优化)。


从汇编代码来看,似乎没有进行任何优化。 - Anirudh Ramanathan
你有没有看到原始问题中特别指出不使用gcc -S这部分? - Ken White
我原以为他在使用gcc来检查他的汇编代码(因此有“假定正确”的部分)。不过现在我明白你的意思了。 - Matthew Mellott
我忘了把汇编文件加入到makefile中,现在它好像可以用了。如果你找不到任何问题的话,我想我搞定了。 - Jamie Ford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接