如何使用ARM在数组索引处存储值?

时间:2014-04-29 23:55:23

标签: arrays arm

我试图在ARM中编写一个while循环来检查数组位置是否包含破折号,如果没有,它会将偏移量减去7并再次检查。如果找到破折号,它将在那里存储一个“X”符号。当我运行它时,我得到一个分段错误。我的预测是,我在程序的最后一行存储它的方式有问题。 有任何想法吗?这是我的代码:

 /*Store input into array*/
store:    
    ldrb    r4,[sp]          /*store the value at sp in r4*/
    add     r4, r4, #34      /*increase r4 by 34 to give the offset*/
    ldr     r5, =array       /*r5 points to the first index in array*/
    mov     r2, #0x2D        /*r2 contains the dash symbol '-'*/
storeWhile:     /*While loop for store*/
    ldrb    r6, [r5,r4]      /*r6 contains address of array + the offset*/
    cmp     r6, r2           
    beq     empty            /*if(array[offset] == '-') branch*/
    sub     r4, r4, #7       /*else, subtract offset by 7*/
    cmp     r4, #0           
    bge     storeWhile       /*if(offset >= 0) branch back to start of loop*/
empty:  
    mov     r2, #0x58
    str     r2, [r6]         /*Store r2 (Uppercase X) into posotion at array + offset (r6)*/

非常感谢!

1 个答案:

答案 0 :(得分:0)

mov     r2, #0x58
str     r2, [r6]

没有意义。存储指令(str Rd, [Rn])将Rd保存在Rn中。你可能想要这样的东西

mov     r6, #0x58
str     r6, [r5,r4]

您还应该使用subs代替sub,然后cmp