网上科普有关“ARM STM32 嵌入式 汇编指令LDMIA用法”话题很是火热,小编也是针对ARM STM32 嵌入式 汇编指令LDMIA用法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
LDM是多寄存器存取的意思,IA表示数据传输后地址增加(increase after);(IB:increase before, DA: decrease after, DB: decrease before)
后面参数以“,”分隔,第一个参数是首地址;第二个参数是寄存器列表,并以“{}”括起来。
具体的例子:
LDMIA R0!, {R1-R4}
R0表示要操作的存储空间首地址,要操作的数据个数由寄存器列表决定,现在是R1到R4,共4个数据(每个数据是32bits的)
具体:地址为R0的存储空间中的数据赋值给R1
地址为R0+4的存储空间中的数据赋值给R2
地址为R0+8的存储空间中的数据赋值给R3
地址为R0+12的存储空间中的数据赋值给R4
所有的示例指令执行前的存储空间和寄存器情况:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010000
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
执行后存储空间不变,寄存器变化:
r0 = 0x00010010
r1 = 0x01
r2 = 0x02
r3 = 0x03
r4 = 0x04
ARM汇编指令NOP指令问题
blr : 带反回的跳转指令,照转到指令后边跟随寄存器中保存的地址;
mov :将某一寄存器的值复制到另一个寄存器(只能用于寄存器与寄存器或者寄存器与常量之间传值,不能用于内存地址), 如:
mov x1, x0 将寄存器x0的值复制到寄存器x1中;
ldr :将内存中的值读取到寄存器中,如:
ldr x0, [x1, x2] 将寄存器x1和寄存器x2相加作为地址,取该内存地址的值放入寄存器x0中;
str : 将寄存器中的值写入到内存中, 如:
str x0, [x0, x8] 将寄存器x0的值保存到内存[x0 + x8]处;
bl : 跳转到某地址
你还真把人问住了,让我一下子都不确定NOP是不是真的很简单了。
NOP是ARM的空操作伪指令,较早的针对ARM架构的编译器会把NOP解释为一个“指令对齐”的额外的一次取指操作,也就是比如一个指令占了3个字节,那么NOP就会让CPU多执行一次空取指操作,以达到延时的作用;
针对ARMv4以后的架构,编译器一般是汇编出一个类似于MOV R0 , R0这样的指令,来“干一件毫无意义的事情”,目的就是等待CPU一个指令周期;
至于用法,那太多了,凡是涉及到硬件设置的,这里举一个例子,你设置一个外设(给其发送了一个信号),但是硬件电路的响应是有延迟的,在你再次对这个外设读之前,要NOP几下以避免返回错误状态。
关于“ARM STM32 嵌入式 汇编指令LDMIA用法”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[南香小哥哥]投稿,不代表小熊号立场,如若转载,请注明出处:https://xx-scm.com/cshi/202607-178827.html
评论列表(4条)
我是小熊号的签约作者“南香小哥哥”!
希望本篇文章《ARM STM32 嵌入式 汇编指令LDMIA用法》能对你有所帮助!
本站[小熊号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上科普有关“ARM STM32 嵌入式 汇编指令LDMIA用法”话题很是火热,小编也是针对ARM STM32 嵌入式 汇编指令LDMIA用法寻找了一些与之相关的一些信息进行分...