ARM ASM中的LDRB - 一般问题

时间:2014-01-26 11:09:37

标签: assembly load arm

我正在使用ARM架构,我对LDRB的概念有点不清楚。 LDRB是带有可选B命令的LDR,用于加载32位字的最低有效字节。三个问题。

  1. 我真正想要的是前8位,而不是最后8位(我在数组上迭代)。有一种优雅的方式来做到这一点?我找不到它的命令。
  2. 我现在正在做的是SUB r4,r4,#3将r4(我想要加载的指针)移回三个字节,以便最低有效字节现在是32位前面的字节字。如果我所做的只是向前迭代,这是否会导致内存问题?
  3. 我正在使用LDRB r7,r4;这应该将r4中的最低有效字节加载到r7中。通过零延伸,它意味着什么会出现像00 ... 00010101,或10101000 ... 00?

1 个答案:

答案 0 :(得分:4)

如果你想要一个32位字的MSB,那么得到一个32位字的MSB:

LDR R0, [R1]
LSR R0, #24

在不同的字节序系统中,任何其他东西都令人困惑并且完全不可移植 - 尝试在BE系统上假设LE中断时字节地址字。如果它发现自己在一个古老的BE-32系统上,它对BE-8有什么作用。

实际上,如果从[word ptr - #3]加载一个字节真的给你MSB而不是前一个单词的第二个最低有效字节,那么我认为你在BE-32上 system * - 因此,它不会在任何现代的东西上正常工作。

*或BE-8 - 内存字节序与总线字节序以及字与字节寻址之间的诡计令人非常困惑,我并没有声称它已经完全崩溃了。