我试图在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)*/
非常感谢!
答案 0 :(得分:0)
mov r2, #0x58
str r2, [r6]
没有意义。存储指令(str Rd, [Rn]
)将Rd保存在Rn中。你可能想要这样的东西
mov r6, #0x58
str r6, [r5,r4]
您还应该使用subs
代替sub
,然后cmp
。