我试图在ARM assembly
中编写字符串比较功能
比较两个字符串A
和B
后,其中一个字符串应存储在内存中
如果它们不相等,则字符串B
将保存在内存中。在下面的代码中,存储操作在名为StoreA
和StoreB
的标签中执行(下面的代码不是完整的代码)
我希望下面的代码能够在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
答案 0 :(得分:0)
您的主循环Compare
仅检查字符串终止符,并且不会比较它们的内容。我在为这个处理器编写代码方面只有很少的经验,所以我只想猜测每个字符串中的字符需要什么指令。
此外,遇到0
字符串结束标记时分支的两个代码块仅比较字符串长度是否相同。
并且"其中一个将被存储在内存中#34;是一种错误的信念。两个字符串都已存储在内存中。