簡體   English   中英

在組裝中合並兩個字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM