0

基本的に、2 つの文字列を 1 文字ずつ追加しようとしています。

最後に到達するまで、最初の文字列の各文字を調べます

次に、次の文字列の各文字も調べます

私の問題は、次の文字列の文字を最初の文字列 (0 終端バイトの前) に格納しようとしています。

strcat
    ADD R4, R4, #1
    LDRB R0, [R1], #1
    CMP R0, #0
    BNE strcat
    SUB R4, R4, #1      ;take byte pointer 1 step back to ignore 0
    B stradd

stradd  
    LDRB R0, [R2], #1   ;otherwise we would include the 0 char
    STRB R0, [R1], R4
    CMP R0, #0
    ADD R4, R4, #1
BNE stradd      ;keep adding chars

これまでの私の方法は、R1 + R2を連結しようとしています

質問

R1 の文字列の最後の適切な文字のアドレスでバイトの保存を開始するように、STRB (または他の方法を完全に) を変更する方法

R1 の文字が 'h' 'e' 'l' 'l' 'o' 0 のように見え、R2 の文字が 'y' 'u' 'o' のように見える場合

このメソッドは、R1 の文字を 'h' 'e' 'l' 'l' 'o' 'y' 'u' 'o' 0 に変更する必要があります。

4

1 に答える 1

1

それ以来、このソリューションを提供してくれた友人に尋ねました

文字の位置を追跡するために R4 を使用する必要はありません。代わりに、最初の文字列の 0 を除外して連結するより洗練されたソリューションは次のとおりです。

strcat
    LDRB R0, [R1], #1
    CMP R0, #0
    BNE strcat
SUB R1, R1, #1

stradd  
    LDRB R0, [R2], #1   ;otherwise we would include the 0 char
    STRB R0, [R1], #1
    CMP R0, #0
    BNE stradd      ;keep adding chars
于 2012-09-03T05:46:35.627 に答える