ARM程序集:从内存连接2个字符串

ARM程序集:从内存连接2个字符串,arm,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

简单的手臂语言,请保持答案简单

    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
我正在尝试连接
STRING1
STRING2
,并将结果存储在
STRING3
中,同时在字符串
0x00


这是否正确?

您将获得“无写入权限”,因为您必须在Kiel模拟器的“调试”选项卡中将内存映射设置为“读取/写入/执行权限”

“这是否正确?”那么,在运行它时,它是否给出了预期的结果?您是否在调试器中对其进行了检查,以验证它是否执行了您认为的操作?在你检查它是否为零之前,先考虑将字符存储到输出字符串中的重要性,并考虑这是否是一个问题,或者是一些你可以很聪明的问题,并且可以更多地利用它。每当我一步一步地通过STRB时,它就没有写权限。你将R0(地址)与0进行比较,但是您应该将r4(值)与零进行比较。另外,将cmp放在ldrb之后,并且仅在不相等时写入(strbne),因为您不想写入零