I'm trying to write string compare function in ARM assembly
.
After comparing two strings A
and B
, one of them should be stored in memory.
If they are not equal, string B
will be saved in the memory. In below code, storing operation is executed in the label named StoreA
and StoreB
(below code is not a complete code)
I expected below code to store a character H
in 0x00040000
however STRB
instruction seems not working.
Please give me a advice.
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
Your main loop Compare
only checks for string terminators, and does not compare their content. I have only a very little experience in writing code for this processor, so I would only guess what instructions are needed to check the characters within each string.
Also, the two code blocks that are branched to when encountering the 0
end-of-string marker only compare if the strings are the same length.
And "one of them will be stored in memory" is a false belief. Both strings are already stored in memory.
User contributions licensed under CC BY-SA 3.0