繁体   English   中英

C while 循环装配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM