这些指令装载和存储 Rd 的值从/到指定的地址。假如象后边两个指令那样还指定了B,则只装载或存储一个单一的字节;关于装载,寄存器中高端的三个字节被置零(zeroed)。
地址可所以一个简略的值、或一个偏移量、或者是一个被移位的偏移量。沉痛还沉痛把组成的有用地址写回到基址寄存器(去除了对加/减操作的需求)。
假如你指定预先变址寻址(这儿的基址和变址都在方括号中),用是不是真的存在!来操控写回操作。上面的第4和第5个比方中运用了这一个标志。你沉痛正常的运用它来在内存中主动正向或反向移动。一个字符串打印例程将变成:
关于往后变址寻址!是无效的(这儿的变址在方括号外面,比方上面的比方6),由于写回是暗含的。
好像你见到的那样,变址沉痛被移位来完成份额缩放。除此之外,沉痛从基址上减去偏移量。在这种情况下,你沉痛正常的运用如下代码:
虽然你沉痛存储或装载 PC,但你不沉痛用装载或存储指令来修正 PSR。要装载一个被存储的状况并正确的稳扎稳打它,请运用:
译注:下文所叙说内容针对的是小端字节序装备,对大端字节序装备在手册中还有专门叙说。
假如供给的地址在一个字鸿沟上,则字节装载(LDRB)运用在 0 至 7 位上的数据,假如在一个字地址加上一个字节上,则运用 8 至 15 位,以此类推。挑选的字节被放入方针寄存器的低端 8 位中,并把寄存器中其他的位用零填充。
上重复源寄存器的的低端 8 位 4 次。由外部的内存呈现来激活恰当的字节子呈现来存储数据。
字装载(LDR)或字存储(STR)将生成一个字对齐的地址。运用一个非字对齐的地址将有不明显和未规则的成果。实际上提示的是你不沉痛运用 LDR 从一个非对齐的地址装载一个字。
汇编器照顾擦拭映射这些助记符。员工 ED 不同于 IB;只关于预先削减装载是相同的。在存储的时分,ED 是往后削减的。
FD、ED、FA、和 EA 指定是满栈仍是空栈,是升序栈仍是降序栈。一个满栈的栈指针指向前次写的最终一个数据单元,而空栈的栈指针指向第一个闲暇单元。一个降序栈是在内存中反向增加(就是说,从应用程序空间完毕处开端反向增加)而升序栈在内存中正向增加。
RISC OS 运用传统的满降序栈。在运用契合 APCS 规则的编译器的时分,它一般把你的栈指针设置在应用程序空间的完毕处并接着运用一个 FD (满降序 - Full Descending)栈。假如你与一个高档言语(BASIC 或 C)一同作业,你将别无挑选。栈指针(传统上是 R13)指向一个满降序栈。你有必要持续这个格局,或则树立并办理你自己的栈(假如你是死硬派人士那么你或许喜爱这样做!)。
基址是包括开端地址的寄存器。在传统的 RISC OS 下,它是栈指针 R13,但你沉痛正常的运用除了 R15 之外的任何可获得的寄存器。
假如你想把操作后栈顶的当时的内存地址保存到栈指针中,沉痛简略的在栈指针寄存器后边设置一个写回标志!。
寄存器列表放在{花括号}中。不论你用什么次第在其中指定寄存器,寄存器按从最低到最高的编号次第与到从低端到高端的内存之间传送数据。而且由于用指令中的一个单一的位来表明是否保存一个寄存器,不或许指定某个寄存器两次。它的副作用是不能用下面这样的代码:
供给了一个有用的简写。要包括一个规模的寄存器,沉痛简略的只写第一个和最终一个,并在其间加一个横杠。例如R0-R3同等与R0, R1, R2, R3,仅仅愈加规整和沉着罢了...
在把 R15 存储到内存中的时分,还保存了 PSR 位。在从头装载 R15 的时分,除非你要求否则不稳扎稳打 PSR 位。要求的办法是在寄存器列表后跟从一个^。
员工在这两个比方中,R14 被直接装载到 PC 中。这节省了对 MOV(S) R14 到 R15 中的需求。