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),因为您不想写入零