gpt4 book ai didi

assembly - 如何在 ARM 中读取单字节序列?

转载 作者:行者123 更新时间:2023-12-01 19:19:37 25 4
gpt4 key购买 nike

我知道

ldrb r1, [r0]

将从r0指向的地址读取一个字节。但是,我仍然不知道如何读取r0 + 1字节,然后读取r0 + 2,r0 + 3等等。将会

ldrb r1, [r0, #1]

做我想做的事?那和这个一样吗?

add r0, r0, #1

ldrb r1, [r0]

我的目标是将 rev 指令实现为一个函数,我正在做的是

lrdb r4, [r0]

lrdb r5, [r0, #1]

lrdb r6, [r0, #2]

lrdb r7, [r0, #3]

str r7, [r0]

str r6, [r0, #1]

str r5, [r0, #2]

str r4, [r0, #3]

但是,只有r7从数字中读取一个字节,所有其他寄存器读取0。我做错了什么?

最佳答案

ldrb r1,[r0,#1]

表示将 r0 中的值加 1 并从那里加载,将字节(补零)放入 r1 中。

ldrb r1,[r0],#1

表示取出r0中的值,将其作为读取字节的地址,将字节放入r1中,然后r0加1。

ldrb r1,[r0],#1 

相同
ldrb r1,[r0]
add r0,r0,#1

只需一条指令而不是两条指令

我假设你想要一个使用的循环

ldrb r1,[r0],#1 

唯一的缺点是你的指针移动就像做 *p++ 而不是 array[x++]

另一种不破坏底座的解决方案是

ldrb r1,[r0,r2]
add r2,r2,#1

获取r0和r2中的值,将它们加在一起,将其用作地址并读取一个字节并将其存储在r1中

可能更好

mov r2,r0
loop:
ldrb r1,[r0],#1
...
(end of loop)
mov r0,r2

如果您关心在寄存器中保留字符串地址的开头。

并非所有这些都记录在与arm文档中的每条指令和寻址模式相关的伪代码中。信息中心.arm.com

关于assembly - 如何在 ARM 中读取单字节序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663491/

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