我正在尝试以基本方式合并程序集中的两个简单字符串,例如:
字符串1:AAAAAA
字符串2:BBB
结果:ABABABAAA
所以只是交替的角色。
我一直试图这样做,但由于某种原因,我从来没有到达我的字符串上的空终止符,调试器使我甚至无法弄清楚如何找出字符串正在组合起来。
AREA HW42, CODE, READONLY
ENTRY
EXPORT main
main
MAX_LEN EQU 100
LDR R8, =StrOne
LDR R9, =StrTwo
Loop
LDRB R3, [R8], #1
STRB R3, [r2], #1
LDRB r4, [r9], #1
STRB r4, [r2], #1
ORR R5, R3, R4
CBZ R5, DONE
B Loop
LDR R8, =MixStr
STR R3, [R8]
DONE
stop
MOV r0, #0x18
LDR r1, =0x20026
SVC #0x11
ALIGN
AREA HWData, DATA, READWRITE
EXPORT adrStrOne
EXPORT adrStrTwo
EXPORT adrMixStr
StrOne DCB "HLO",0
StrTwo DCB "EL",0
MixStr SPACE MAX_LEN
adrStrOne DCD StrOne
adrStrTwo DCD StrTwo
adrMixStr DCD MixStr
ALIGN
END
我在这里做错了什么?
答案 0 :(得分:1)
ORR R5, R3, R4
CBZ R5, DONE
这使得它可能会一直持续到内存和故障结束,因为你的字符串长度不同:
'H' | 'E' != 0
'L' | 'L' != 0
'O' | '\0' != 0
'\0' | ??? != 0 (probably)
...
如果您需要处理不同长度的字符串,则需要单独检查并处理每个字符串的结尾。
事实上,它没有“可能” - 由于你的数据布局,第一个“???”实际上将是MixStr
的开头,由于此时为“H”而保证为非零,从那时起你就会将结果的早期部分复制到自身,直到你脱落为止数据部分或内存的结尾,以先到者为准。