如果有人可以帮助我,我真的很感激。
如果将r2与r2进行比较,为什么在第一次读取BEQ时不进行代码分支。显然,r0中的最终值为0X0000001B。非常感谢,我在Keil中一遍又一遍地运行,感到非常困惑和沮丧。
MOV r0,#1
MOV r1, #0X3
MOV r2,#0X3
MOVS r2,r2
while
BEQ stop
MUL r0,r1,r0
SUBS r2,r2,#1
B while
stop
答案 0 :(得分:0)
您的代码不会分支,因为BEQ测试Z标志是否等于1。
如果要将Z标志设置为1,则可以使用CMP检查标志N和Z。这将使R2-R2 = 0,Z = 1
MOV r0,#1
MOV r1, #0X3
MOV r2,#0X3
CMP r2,r2
while
BEQ stop
MUL r0,r1,r0
SUBS r2,r2,#1
B while
stop
另一种效率较低的方法是将另一个寄存器与SUBS一起使用,设置所有标志(NZCV)。
MOV r0,#1
MOV r1, #0X3
MOV r2,#0X3
SUBS r3, r2,r2
while
BEQ stop
MUL r0,r1,r0
SUBS r2,r2,#1
B while
stop
祝你好运!