gpt4 book ai didi

C代码调用程序集: infinite loop

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:38 29 4
gpt4 key购买 nike

我正在测试一个简单的汇编函数 (SPARC)。该函数如下,应该有两个参数,x*str,并计算 x*str 中出现的次数。但是,该函数会导致无限循环。我正在使用 C 来调用汇编函数,这也在下面。什么可能导致无限循环?澄清一下,汇编函数重复移动到 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);

最佳答案

每次你找到一个匹配的字母,你不会递增 %o1。因此,您总是只能晋级到第一场比赛,然后就被卡住了。

如果您的 eq 将包含 inc %o1,它应该可以工作。

该函数将返回一个“不匹配”的字符串。将计数器增量移动到 o1 增量之上,并添加一个跳转到“next:”

      cmp %o0, %o2
bne next
nop
eq: inc %l0
nop
next: inc %o1
ba loop

关于C代码调用程序集: infinite loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625248/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com