我正在编写ARM汇编函数,它将字符串中的特定字符替换为另一个字符串,并计算结束时替换发生的次数。到目前为止,我已经这样做了:
.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], #1
cmp a2, v3
strbeq a2, [a1, #-1]
cmp v3, #0
bne loop
mov a1,v2 //return value
ldmfd sp!, {v1-v6, pc}
.end
它没有给出正确的输出。它只显示第一个字符。 C语言中的等效代码是:
#include <stdio.h>
#include <stdlib.h>
extern int replace( char * s, char lr, char rp ) ;
int main( int argc, char * argv[] )
{
int result ;
char lr = 'e' ;
char rp = 'X' ;
char str[] = "easy to replace" ;
result = replace( str, lr, rp ) ;
printf( "%d changes, %s\n", result, str ) ;
exit( 0 ) ;
}