STRB指令似乎不适用于ARM程序集

时间:2015-10-05 19:46:25

标签: assembly arm

我试图在ARM assembly中编写字符串比较功能 比较两个字符串AB后,其中一个字符串应存储在内存中 如果它们不相等,则字符串B将保存在内存中。在下面的代码中,存储操作在名为StoreAStoreB的标签中执行(下面的代码不是完整的代码)

我希望下面的代码能够在H中存储字符0x00040000,但STRB指令似乎不起作用。
请给我一个建议。

AREA Assignment1_2, CODE, READONLY
        ENTRY
Main
    LDR r0,=String1
    LDR r1,=String2

Compare             ; main loop
    LDRB r2, [r0, r5]
    LDRB r3, [r1, r5]

    CMP r2, #0
    BEQ IsEnd1

    CMP r3, #0
    BEQ IsEnd2

    ADD r5, r5, #1
    B Compare


; check if the string ends
IsEnd1
    CMP r3, #0
    BEQ StoreA      ; equal
    B       StoreB      ; not equal

IsEnd2
    CMP r2, #0
    BEQ StoreA      ; equal
    B       StoreB      ; not equal


; store string
StoreA                  ;equal
    SUB r0, r0, r5
    B Endline

StoreB                  ;not equal
    LDRB r3, [r1]
    STRB r3, TEMPADDR
    B Endline

Endline
    MOV pc, lr

TEMPADDR & &00040000
String1 DCB "Hi", 0
String2 DCB "Hik", 0

    END

1 个答案:

答案 0 :(得分:0)

您的主循环Compare仅检查字符串终止符,并且不会比较它们的内容。我在为这个处理器编写代码方面只有很少的经验,所以我只想猜测每个字符串中的字符需要什么指令。

此外,遇到0字符串结束标记时分支的两个代码块仅比较字符串长度是否相同。

并且"其中一个将被存储在内存中#34;是一种错误的信念。两个字符串都已存储在内存中。