[英]Merging two strings in Assembly
我正在嘗試以基本方式合並兩個簡單的字符串,例如:
字串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
我在這里做錯了什么?
ORR R5, R3, R4
CBZ R5, DONE
這使得它可能一直繼續下去,直到它掉到內存和錯誤的末端,因為您的字符串長度不同:
'H' | 'E' != 0
'L' | 'L' != 0
'O' | '\0' != 0
'\0' | ??? != 0 (probably)
...
如果需要處理不同長度的字符串,則需要分別檢查並處理每個字符串的結尾。
實際上,沒有任何“可能”-由於數據的布局,第一個“ ???” 實際上將是MixStr
的開始, MixStr
為'H',因此它保證為非零,然后從此開始,將結果的較早部分復制到自身中,直到失去結尾為止。數據部分或內存,以先到者為准。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.