3

自分でアセンブリを練習したいので、gcc-S関数を使わずにCコードをアセンブリに変換しようとしています。何らかの理由で、アセンブリファイルを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
4

1 に答える 1

1

次のコマンドを使用してみてください。

gcc -S -O0 myfile.c

その追加の gcc オプションは、すべての最適化 (コードを再配置できるものなど) をオフにします。

于 2012-11-21T19:03:38.537 に答える