gpt4 book ai didi

c - ARM 上的反向弦

转载 作者:行者123 更新时间:2023-11-30 16:39:10 24 4
gpt4 key购买 nike

我尝试将以下C代码翻译成arm语言

int main(int argc,char **argv){

for(int i=strlen(argv[1])-1;i!=-1;i--)printf("%c",argv[1][i]);

}

C 代码将 argv[1] 中的字符串反转

$ g++ -o reverse reverse.c

$ ./reverse abcd

$ dcba

我知道字符串 argv[1] 存储在 r1+4 中argc 存储在 r0 中

但是我不知道字符串argv[1]的结束地址是多少,我发现一篇文章写了r0存储r1的长度,所以我在这篇文章上写了我的代码,这是我的arm代码

 @@@@ input : hi 
@@@@ expected output : ih
@@@@ if "hi" is a string named a-> string aaa="hi"
@@@@ so r3=aaa[0],and the length of aaa is r2

.text
.align 2
.global main
.extern printf
main:
stmfd sp!, {r0,r1,r2,r3,fp,lr}
ldr r3,[r1,#4] ; r3 = a pointer point to argv[1]
mov r2,r0
sub r2,r2,#4 ;minus the last character (terminated character)
b LOOP
ldmfd sp!, {r0,r1,r2,r3,fp,lr}
bx lr

LOOP:
ldr r0,=string
cmp r2,r3
subne r2,r2,#4 ; if r2 != r3 , r2=r2-4 (address step forward)
bl printf ; print one character
bne LOOP

string:
.asciz "%c"

此arm代码在CodeSourcery中运行

$ arm-none-eabi-gcc j.s -T generic-hosted.ld

$ arm-none-eabi-run a.out "hi"

$ (nothing print,what I expected output : ih)

如何修复我的代码?这个问题困扰了我3天

最佳答案

这段代码完美运行。

area reverseString,code
CR EQU 0x0D
entry
ldr r0,=data
ldr r2,=0x40000000
ldr r3,=0x40000020
mov r4,#00

up ldrb r5,[r0],#1
cmp r5,#CR
strb r5,[r2],#1
add r4,r4,#1
BNE up
sub r4,r4,#1
sub r2,r2,#2
BNE down

down ldrb r6,[r2]
strb r6,[r3],#1
sub r2,r2,#1
subs r4,r4,#1
BNE down


stop b stop
data dcb "Vidya",CR
end

关于c - ARM 上的反向弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47165455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com