0
我正在尝试编写ARM assembly
中的字符串比较函数。
比较两个字符串A
和B
后,应将其中一个存储在内存中。
如果不相等,字符串B
将被保存在内存中。在下面的代码,存储操作在标签执行命名StoreA
和StoreB
(下面的代码是不完整的代码)STRB指令看起来不适用于ARM程序集
我希望下面的代码到字符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:我没有看到任何'r5'的初始化。 #2:目标设备的内存映射是什么?就我们所知,00040000可能在ROM中的某处。 – Michael
请指责'STRB'或其他说明时请小心。据了解,存在处理器错误,但不太可能会遇到处理器错误。 –
您正在存储单个字节,而不是整个字符串。此外,这段代码并没有做任何接近你在你的评论中提出的建议。最后,未初始化的r5是一场灾难。 –