単純なアセンブリ関数 (SPARC) をテストしています。x
以下の関数は、との 2 つのパラメーターを取り、で発生する*str
回数をカウントします。ただし、関数は無限ループになります。C を使用してアセンブリ関数を呼び出していますが、これも以下のとおりです。無限ループの原因は何ですか? 明確にするために、アセンブリ関数は に繰り返し移動し、継続的にインクリメントします。x
*str
eq
l0
組み立て:
.global occurs
occurs: mov 0, %l0 !l0 will be counter
loop: ldsb [%o1], %o2 !get current value, store in o2
cmp %o2, 0 !if current value is terminating 0, end program
be end
nop
cmp %o0, %o2 !if two are equal, increment l0
be eq
nop
inc %o1 !increment o1 to check next address
ba loop
nop
eq: inc %l0
ba loop
nop
end: mov %l0, %o0 !store final result in o0
retl !return value
nop
C 関数呼び出し:
char x = 'A';
char str3[64] = "AaAbBbA";
int oc = occurs(x, str3);
printf("%d", oc);