[英]C while loop in assembly
//R0=cells R1=numb R2=value
count = 0 ;
while (numb-- != 0)
{
if (cells[numb] == value) count++ ;
}
return count;
}
我在组装中做了什么:
Count: // R0 = cells, R1 = numb, R2 = value
PUSH {R4}
MOV R4,0
LDR R0,[R1]
CMP R0,R2
ADD R4,R4,1
POP {R4}
BX LR
.end
我知道这是不正确的,但不确定在哪里工作。 我不想要复杂的汇编代码。
您真的需要以递减方式向后循环数组吗? 您可以更轻松地进行增量。
你犯了很多错误:
要返回一个值,您必须将其保留在 r0 中。 您将结果保留在 r4 中,但随后您弹出 {r4},因此您已经覆盖了您的答案。
您已经正确地将 r0 与 r2 进行了比较,但是如果比较结果如何,您会增加 r4。 您需要将 add 更改为 addeq (如果相等则添加)。 如果您在拇指 state 中,您需要在 addeq 前面加上“it eq”(如果-则相等)。
之后,您需要对另一个保存循环控制变量的寄存器执行类似的操作。 然后你可以根据比较的结果做 beq 或 bne (如果相等则分支,如果不相等则分支)。
一个好的学习方法是将整个 function 写在 c 中,然后用 -S 标志编译得到汇编器 output。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.