自分でアセンブリを練習したいので、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