AREA SearchString, CODE, READONLY
ENTRY
MOV r4, #0 ; 初始化搜索位置索引为0
LDR r0, =str ; 加载字符串地址到r0
LDR r1, =key ; 加载关键词地址到r1
search_loop
LDRB r2, [r0, r4] ; 从字符串中读取一个字节
LDRB r3, [r1] ; 从关键词读取第一个字节
CMP r2, #0 ; 检查字符串是否结束
BEQ not_found
CMP r3, #0 ; 检查关键词是否结束
BEQ found
CMP r2, r3
BNE not_match
MOV r5, r4 ; 暂存当前搜索位置索引
inner_loop
LDRB r2, [r0, r5] ; 从字符串读取下一个字节
LDRB r3, [r1] ; 从关键词读取下一个字节
CMP r3, #0 ; 检查关键词是否结束
BEQ found
CMP r2, r3
BNE not_match
ADD r5, r5, #1 ; 匹配则继续下一个字节
B inner_loop
not_match
ADD r4, r4, #1 ; 不匹配则继续下一个位置
B search_loop
found
SUB r6, r5, r4 ; 计算关键词起始位置
LDR r7, =order
STR r6, [r7] ; 将位置存储到order单元
B end
not_found
MOV r6, #-1 ; 如果未找到设置 -1
LDR r7, =order
STR r6, [r7]
end
MOV r0, #0 ; 程序正常退出
MOV r1, #0
MOV r2, #0
MOV r7, #1
SWI 0
AREA Strings, DATA, READWRITE
str DCB "string 123456 - St - abcd Stringabc.", 0
key DCB "String", 0
order DCD 0
111爽然若失如虎添翼
最新推荐文章于 2025-11-29 18:28:33 发布
179

被折叠的 条评论
为什么被折叠?



