【ARM指令】LDRD与STRD
LDR和STR是数据加载/存储指令
一般的
LDR R0,[R1],#8 ;
将R1指示的存储器中的字节数据读入R0,并将新地址R1+8写入R1
STR R0,[R1,#8] ;
将R0的数据写入以R1+8为地址的存储器中
//正当我以为oh就这的时候,LDRD和STRD出现了,一下整蒙
举个栗子:
LDRD R3,R4,[R0],#0x10;
大家很快发现了不同,这里有两个地址等待数据加载,分别是R3和R4
那么R0+0x10应该怎么分配?R3、R4该何去何从?
都想不到吧 邪魅一笑
ARM指令字长是32位
所以R3中加载到的是R0+0x10所指存储器中的数据
R4中加载到的是R0+0x10+4所指存储器中的数据
简单地表述则R3=[R0+0x10] R4=[R0+0x10+4]
//因为32位是4个字节,就是让R4接着加载后面一个字的数据了
同样的
STRD R3,R4,[R0],#0x10;
[R0+0x10]=R3,[R0+0x10+4]=R4
p.s [R0]是寄存器间接寻址
就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中,用于间接寻址的寄存器必须用[ ]括起来。
版权声明:本文为RFPY_WA原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。