ARM程序集 - 字符串反转

时间:2018-02-20 15:26:59

标签: string assembly arm reverse

我正在使用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 

0 个答案:

没有答案