发布网友 发布时间:2022-04-23 09:39
共3个回答
热心网友 时间:2023-06-26 09:29
LDR 的数据流向为从右向左,即R1的值放在R0指向的地址,R2的值放在R0+4指向的地址,R3的值放在R0+8指向的地址追问永远是从右向左?还是怎么判断追答Sorry,我明白steveguang提问的是LDM,但我回答成STM指令了。
前来解闷 的回答正确。
对于多寄存器操作的方向有一个简单的办法判断:单个寄存器的一方必定是操作地址,多寄存器的一方必定是要存储或加载的寄存器组。
例如
LDMIA R8,{R0,R2,R9}
把R8指向的地址连续3个字,加载到R0,R2,R9中,地址“后增”方式。
热心网友 时间:2023-06-26 09:30
好像ldr指令不能这么用吧,你指的应该是LDM指令追问那如果是LDM呢?追答LDM指令: 带状态寄存器的批量内存字数数据读取指令
LDM指令将数据从连续的内存单元中读取到指令中寄存器列表中的各寄存器中。它同时将当前处理器模式对应的SPSR寄存器内容复制到CPSR寄存器中。用于从异常中断中返回 恢复压栈的寄存器值
STM指令:将指令中寄存器列表中的各寄存器中的各寄存器数值写入到连续的内存单元中。
它主要用于块数据的写入、数据栈操作以及进入子程序时保存相关的寄存器操作。
LDR指令的格式:
LDR{条件} 目的寄存器
作用:将 存储器地址 所指地址处连续的4个字节(1个字)的数据传送到目的寄存器中。
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
(tiegebo的回答真是太汗了,把一个本来就是错误的提问还用错误的答案回答)
通常stm R0,{R1,R2,R3} ldm R0,{R1,R2,R3}是成对出现的,大括号内的寄存器排序都是由小到大排列的。
stm R0,{R1,R2,R3}是将R1,R2,R3三个寄存器的内容存到R0指向的内存地址的连续三个单元中。
ldm反之依然。
热心网友 时间:2023-06-26 09:30
zha顶