Assembly ARM汇编函数,用于替换字符串中的特定字符

Assembly ARM汇编函数,用于替换字符串中的特定字符,assembly,arm,inline-assembly,Assembly,Arm,Inline Assembly,我正在编写一个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

我正在编写一个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 ) ;
}
#包括
#包括
外部内部替换(字符*s、字符lr、字符rp);
int main(int argc,char*argv[])
{
int结果;
字符lr='e';
字符rp='X';
char str[]=“易于更换”;
结果=替换(str、lr、rp);
printf(“%d个更改,%s\n”,结果,str);
出口(0);
}

好的,那么输出是什么,它与您期望的有什么不同?您对代码“到目前为止”的作用有何理解?转储一些代码并说“它没有给出正确的输出”并不构成问题-当然,如果它还没有完成,它就不会给出正确的输出…感谢您的回复,它没有循环,只显示第一个字符。我是汇编初学者,不知道确切的问题,也找不到。这就是为什么要寻求好人的帮助。但是这里没有显示任何东西的代码。也没有关于如何调用这个函数以及使用什么数据的信息;每个登记册的作用是什么;你所使用的每一条指令都应该达到的目标。如果没有这些信息,就不可能调试脱离上下文的代码片段。请参阅和。感谢您的指导,我再次更新了我的问题。请再次检查。
subs
对于ARM汇编中的函数不是一个特别好的名称,因为它也是执行减法和更新状态标志的ARM指令的名称。它显然与您在C代码中使用的名称
replace
不匹配。