我正在使用ARM Assembly。我想要反转一个字符串,所以如果你传递字符串“abcdefg”,它会将字符串更改为“gfedcba”。
本质上,这个汇编代码应该是:
的实现void reversing(char *strn);
我的想法是我必须保持指向每个字符串结尾的指针。然后我会简单地增加一个,然后递减另一个。
reversing:
stmfd sp!,{r4-r8,lr} @ Push to stack
@ Solution here
ldmfd sp!,{r4-r8,lr} @ Pop from stack
bx lr @ return
我不确定将其实现到汇编代码中的实际方法,因此任何建议都会很棒。
尝试解决方案:
reversing:
stmfd sp!,{r4-r8,lr} @ push to stack
mov r5, #0 @ r5 = 0, beginning
b my_strlen @ get r4 = strlen
next:
loop:
ldrb r6, [r0] @ Get char string
@ Not too sure about this part.
strb r7, [r5]
add r5, #1
sub r4, #1
cmp r4, r5
bhi loop
end_reverse:
ldmfd sp!,{r4-r8,lr}
bx lr @ return
@
@ strlen function
@
my_strlen:
@ Register usage:
@ r0: string pointer
@ r4: counter
mov r4,#0 @ zero the counter
counter:
ldrb r2,[r0] @ Get character string
movs r2,r2 @ Set flags
beq strlen_done
add r4,#1 @ Count the letter
add r0,#1 @ Advance to the next character
b counter @ Loop back
strlen_done:
b next