我有這個C驅動程序ARM彙編 - 代碼在一個字符串
#include <stdlib.h>
#include <stdio.h>
extern void subs(char *string, char this_c, char that_cr) ;
int main(int argc, char *argv[])
{
char this_c= 'e' ;
char that_c = 'X' ;
char orgstr[] = "sir sid easily teases sea sick seals" ;
subs(orgstr, this_c, that_c) ;
printf("Changed string: %s\n", orgstr) ;
exit(0) ;
}
我必須做的一個ARM程序改變的字符串「X」和「e」替換字符,到目前爲止,這是我有\
.global subs
subs:
stmfd sp!, {v1-v6, lr} //string entry
mov v1, #0 //set index to 0
mov v2, #0 // set count to 0
loop :
ldrb v3, [a1,v1] // get the first char
cmp a2,v3 //compare char if its the same to the one that has to b chang
mov v3, a3 // change the character for the new character
addeq v2, v2, #1 //increment count
add v1, v1, #1 // increment index
cmp v3,#0 //end of string
bne loop
mov a1,v2 //return value
ldmfd sp!, {v1-v6, pc}
.end
雖然這給了我一個無限循環,我卡住了,誰能幫我找出問題出在哪裏?
因此,這是我到目前爲止,
.global subs
subs:
stmfd sp!, {v1-v6, lr} //string entry
mov v1, #0 //set index to 0
mov v2, #0 // set count to 0
loop :
ldrb v3, [a1,v1] // get the first char
cmp a2,v3 //compare char if its the same to the one that has to b chang
moveq v3, a3 // change the character for the new character
addeq v2, v2, #1 //increment count
add v1, v1, #1 // increment index
cmp v3,#0 //end of string
bne loop
mov a1,v2 //return value
ldmfd sp!, {v1-v6, pc}
.end
它運行但性格從未改變......,輸出端與端是同一個作爲輸入,對於一些因此,A2註冊表是空...
我改變了MOV的MOVEQ,現在它不給我一個無限循環了,但是串出來的只是像原來的那樣,沒有任何改變 – user1773469
它需要是STR而不是mov。 MOV不會改變內存中的字符串,只是寄存器的內容。 –
發生這種錯誤類型:OFFSET_IMM – user1773469