我正在开发一个计算二进制字符串的 1 和 0 数量的程序。我的 CountOnes 子程序按预期工作:
countOnes MOV r1, r0 ;mov random number into r1
TEQ r1, #0 ;test if all 0
MOVEQ pc, r14 ;if all 0's, brake
onesloop SUB r2, r1, #1 ;subtract 1
AND r1, r2, r1 ;and on r1 and r2
ADD r9, r9, #1 ;increment loop counter
TEQ r1, #0 ;test if all 0
BNE onesloop ;if not all 0's, loop
MOV pc, r14 ;return
countZeros MOV r1, r0 ;mov random number in r1
MVN r8, #0 ;fill r8 with 1's
TEQ r1, r8 ;test if number is all 1's
MOVEQ pc, r14 ;if all 1's, break
zerosloop ADD r2, r1, #1 ;add 1 to r2
AND r1, r2, r1 ;and r1 and r2
ADD r9, r9, #1 ;increment loop count
TEQ r1, r8 ;test if all ones
BNE zerosloop ;if not all 1's, loop
MOV pc, r14 ;return
然而,我的countZeros子程序无限循环,用调试器查看后发现ADD和AND指令只在第一次循环中执行(这就是无限循环的原因),然而,整个循环没有中断,寄存器 9 每次迭代都会继续递增。我想不出任何理由让这些指令停止执行。任何人都遇到过这种行为或知道会导致它的原因吗?如果您需要有关任何事情的更多信息,请询问。