간단한 어셈블리 함수 (SPARC)를 테스트하고 있습니다. 이 함수는 아래에 있으며 x
및 *str
의 두 매개 변수를 사용하고 x
이 발생하는 횟수를 *str
에 계산합니다. 그러나이 함수는 무한 루프를 발생시킵니다. 나는 어셈블리 함수를 호출하기 위해 C를 사용하고 있는데, 이것은 아래에도있다. 무한 루프의 원인은 무엇입니까? 명확하게하기 위해 어셈블리 함수는 eq
으로 반복적으로 이동하고 l0
을 계속 증가시킵니다.C 코드 호출 어셈블리 : 무한 루프
어셈블리 :
.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);
항상 가장 간단한 방법입니다. 나는 이것을 30 분 동안 꼼짝 않고 바라 보았다. 신선한 눈 세트가 엄청난 도움이됩니다. 고맙습니다! – vaindil