| 注意 | 多寄存器Load/Store内存访问指令会增加中断延时,因为ARM通常不会打断正在执行的指令去响应中断,而必须等到指令执行完。也就是说,如果一个中断在多寄存器Load/Store内存访问指令执行期间产生,那么处理器在多寄存器Load/Store内存访问指令执行完后才对中断响应。 |
指 令 | 作 用 | 操 作 |
LDM | 装载多个寄存器 | {Rd}*N←mem32[start address+4*N] |
STM | 保存多个寄存器 | {Rd}*N→mem32[start address+4*N] |
| 注意 | 如果基址寄存器包含在指令列表中,当指令执行完后,基址寄存器的值是新加载进的特定内存地址的值。也就是说,即使指令没有出现在指令列表中,基址寄存器的值也可能被修改。 |
| 注意 | 无论寄存器在寄存器列表“{}”中如何排列,都将遵循上述规则。 |
| 注意 | 与LDM(1)指令不同,PC不能包含在寄存器列表中。 |
| 注意 | 如果基址寄存器包含在指令列表中,当指令执行完后,基址寄存器的值是新加载进的特定内存地址的值。也就是说,即使指令没有出现在指令列表中,基址寄存器的值也可能被修改。 |
| 注意 | 在本格式的指令中寄存器列表中必须包含PC寄存器。 |
| 注意 | 地址对齐问题,在这些指令中,忽略地址位[1:0]。 批量加载/存储指令举例如下。 |
| 向 上 生 长 | 向 下 生 长 | |||
满 | 空 | 满 | 空 | ||
增加 | 之前 | STMIB | | | LDMIB |
STMFA | | | LDMED | ||
之后 | | STMIA | LDMIA | | |
| STMEA | LDMFD | | ||
增加 | 之前 | | LDMDB | STMDB | |
| LDMEA | STMFD | | ||
之后 | LDMDA | | | STMDA | |
LDMFA | | | STMED |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |