ARM汇编:从内存连接两个字符串

3
简单的 ARM 语言,请简洁回答。
    AREA one, CODE
        ENTRY
        LDR r0, =STRING1
        LDR r1, =STRING2
        LDR r3, =STRING3

`loop1` LDRB r4, [r0], #1
        STRB r4, [r3], #1
        CMP r0, #0x00
        BNE loop1

loop2   LDRB r4, [r1], #1
        STRB r4, [r3], #1
        CMP r1, #0x00
        BNE loop2

        LDRB r4, #0x00
        STRB r4, [r3]

        ALIGN
STRING1 DCB "This is a test string1"            ;String1
EoS1    DCB 0x00                                ;end of string1
STRING2 DCB "This is a test string2"            ;String
EoS2    DCB 0x00                                ;end of string2
STRING3 space 0xFF 
        END

我想要拼接STRING1STRING2,并将结果存储在STRING3中,同时还要附加字符串结尾的NULL字符0x00

这样做正确吗?


1
“这是正确的吗?”那么,当您运行它时,它是否产生了预期的结果?您是否通过调试器逐步检查它以验证它是否执行了您所认为的操作?请仔细考虑将字符存储到输出字符串中,在检查它是否为零之前的重要性,并考虑是否存在问题,或者您可以聪明地更好地利用它。 - Notlikethat
每次我执行STRB时都会出现“无写入权限”的提示? - Hashim Salem
1
你正在将r0(地址)与零进行比较,但应该将r4(值)与零进行比较。同时,在ldrb之后放置cmp,并仅在不相等时编写(strbne),因为您不想写入零。 - samgak
1个回答

1
您之所以会出现“无写入权限”的情况,是因为您需要在Kiel模拟器的调试选项卡中设置内存映射为读/写/执行权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接