LDMFD和STMFD 是什么意思,那位大神帮解呀

作者&投稿:张斧 (若有异议请与网页底部的电邮联系)
(解然)的意思是什么?拜托各位大神~

解释然后

但我依旧还在听你说,不然为啥我还在回答你的问题。

指令STMFD和LDMFD分析;

根据ATPCS规则,我们一般使用FD(Full Descending)类型的数据栈!所以经常使用的指令就有STMFD和LDMFD,

通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD的地址计算方法:

STMFD指令的寻址方式为事前递减方式(DB)

而DB寻址方式实际内存地址为:

start_address = Rn - (Number_Of_Set_Bits_In(register_list)*4)

end_address = Rn - 4

STM指令操作的伪代码:

if ConditionPassed(cond) then

address = start_address

for i = 0 to 15

if register_list[i] == 1

Memory[address] = Ri

address = address + 4

有上面两个伪代码可以得出 STMFD SP!,{R0-R7,LR} 的伪代码如下:

SP = SP - 9×4;

address = SP;

for i = 0 to 7

Memory[address] = Ri;

address = address + 4;

Memory[address] = LR;

LDMFD指令的寻址方式为事后递增方式(IA)

IA内存的实际地址的伪代码

start_address = Rn

end_address = Rn + (Number_of_set_bits_in(register_list)*4) - 4

LDM指令操作的伪代码(未考虑PC寄存器):

if ConditionPassed(cond) then

address = start_address

for i = 0 to 15

if register_list[i] == 1

Ri = Memory[address,4]

address = address + 4

所以LDMFD SP!,{R0-R7,PC}^ (;恢复现场,异常处理返回)伪代码是:

address = SP;

for i = 0 to 7

Ri = Memory[address ,4]

address = address + 4;

SP = address;


江苏省18462663051: LDMFD和STMFD 是什么意思,那位大神帮解呀 -
堂庞氨麻: 指令STMFD和LDMFD分析; 根据ATPCS规则,我们一般使用FD(Full Descending)类型的数据栈!所以经常使用的指令就有STMFD和LDMFD,通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD的地址计...

江苏省18462663051: LDMFD和STMFD -
堂庞氨麻:[答案] 指令STMFD和LDMFD分析; 根据ATPCS规则,我们一般使用FD(Full Descending)类型的数据栈!所以经常使用的指令就有STMFD和LDMFD, 通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD的地址计算方法...

江苏省18462663051: 汇编语言 汇编指令中 stmfd ldmfd 什么意思??表示什么逻辑运算?一定采纳 -
堂庞氨麻: 指令STMFD,LDMFD分析;根据ATPCS规则,我们一般使用的FD(满降序)类型的数据栈!常用指令,STMFD和LDMFD, ARM的堆栈操作和批量加载/存储指令的寻址模式,你就可以知道地址的指令STMFD和LDMFD计算的方法:BR /> ...

江苏省18462663051: 嵌入式 LDMIA语句什么意思 -
堂庞氨麻: 多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;弄清堆栈寻址的SP的变化:LDMFA,LDMFD,...

江苏省18462663051: 嵌入式stmfd 伪代码 -
堂庞氨麻: 要弄懂这个问题你要知道一点:sp始终是指向栈的顶部的,而且对于大多数的设计来说都是把栈底设置在高地址,栈顶设置在低地址,即是说上面所说的首先要sp=sp-sp*9*4,这里理解了之后就好理解了,根据上面你说的那个来分析一下,现在...

江苏省18462663051: 关于ARM汇编,STM和LDM指令的疑问 -
堂庞氨麻: 恩,是这样的意思,ARM中的LDM/STM指令主要用于现场保护,数据复制,参数传送等.在ARM中,ARM堆栈结构是从高向低压栈的,在初始的时候就像你理解的那样,sp是在高地址,然后按照高编号进行压栈操作.ldm有相关伪指令,你可以参考下:LDMFD SP!,{R0-R7,PC}^ 对于这条指令,网上的伪代码解释是:address = SP; for i = 0 to 7 Ri = Memory[address ,4] address = address + 4; SP = address;

江苏省18462663051: ARM指令集问题:满递减与空递减 -
堂庞氨麻: 不错,其实你自己已经解释清楚了,呵呵 为什么呢?首先你要理解“基址寄存器指向存储有效数据的最低地址或者指向第一个要读出的数据位置”的概念 比如我的FD堆栈里面有如下数据 地址 数据0x100 90xfc 80xf8 70xf4 60xf0 50xec 40xe8 30...

江苏省18462663051: ARM指令集
堂庞氨麻:在进行数据复制时,先设置好源数据指针,然后使用块拷贝寻址指令ldmia/stmia、ldmib/stmib、ldmda/stmda、ldmdb /stmdb 进行读取和存储.而进行堆栈操作时,则要先设置堆栈指针,一般使用sp 然后使用堆栈寻址指令stmfd/ldmfd、stmed.ldmed、stmfa/ldmfa、stmea/ldmea 实现堆栈操作.多寄存器传送指令示意图如图a-1所示,其中r1为指令执行前的基址寄存器,r1'则为指令执行完后的基址寄存器.

江苏省18462663051: LDMIA是什么 -
堂庞氨麻: 地址是按字节来的,32位也就是4个字节

江苏省18462663051: arm指令集多少位宽 -
堂庞氨麻: 32bit 等长位宽,thumb指令等长16bit位宽,这就是精简指令集的优点

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网