[应用相关] 指令集及cortex——m3的存储系统

[复制链接]
3884|58
 楼主| 略略u 发表于 2024-3-31 16:45 | 显示全部楼层
移位(支持多种组合)运算和循环运算
35539660922c338590.png
 楼主| 略略u 发表于 2024-3-31 16:46 | 显示全部楼层
带符号扩展指令
67172660922da5f5fd.png
数据序转指令
48632660922e06f706.png
 楼主| 略略u 发表于 2024-3-31 16:46 | 显示全部楼层
位段处理及把玩指令
14243660922ebc9d3d.png
 楼主| 略略u 发表于 2024-3-31 16:46 | 显示全部楼层
汇编语言:子程序呼叫与无条件转移指令

  1、最基本的无条件转移指令有两条:

     B    Label    ;转移到Label处对应的地址

     BL    reg    ;转移到有寄存器reg给出的地址



  2、呼叫子程序时,需要保存返回地址,正点的指令是:

     BL    Label    ;转移到Label处对应的地址,并且把转移前的下条指令地址保存到LR

     BLX    reg    ;转移到由寄存器reg给出的地址,根据REG的LSB切换处理器的状态,并且把转移前的下条指令地址保存到LR

   注意:、使用BLX要注意,其改变状态的功能。因此确保reg的lsb必须为1,以确保不会进入ARM状态。



  3、以PC为目的寄存器的MOV和LDR指令也可以实现转移,常见的形式有:

     MOV    PC,    R0    ;         转移地址由R0给出

     LDR     PC,    [R0]    ;      转移地址存储在R0所指向的存储器中

     POP    {...,  PC]    ;     把返回地址以弹出堆栈的方式送给PC,从而实现转移

     LDMIA    SP!,     {...,  PC    ;   POP另一种等效写法

   注意:使用这些方式必须保证送给PC的值是奇数(LSB=1)
 楼主| 略略u 发表于 2024-3-31 16:47 | 显示全部楼层
标志位与条件指令

  1、在应用程序状态寄存器中有5个标志位,但只有4个被条件转移指令参考。绝大多数ARM的条件转移指令根据他们来决定是否转移。


5396066092308a351b.png


  2、在ARM中数据操作指令可以更新这4个标志位。这些标志位除了可以当条件转移的判断之外,还能再一些场合下作为指令是否执行的依据。或者在移位操作中充当各种中介

        角色。
 楼主| 略略u 发表于 2024-3-31 16:47 | 显示全部楼层
担任条件转移和条件执行的依据时,这4个标志位既可以单独使用,也可以组合使用,以产生15种判断依据:
4152066092315d5a20.png

在Cortex-CM3中,下列指令可以更新PSR的标志:

   1)、16位算术逻辑指令。

   2)、32位带S后缀的算术逻辑指令。

   3)、比较指令和测试指令。

   4)、直接写PSR/APSR(MAR指令)。

 楼主| 略略u 发表于 2024-3-31 16:47 | 显示全部楼层
汇编语言:指令隔离指令和存储器隔离指令
666396609232a7106a.png
 楼主| 略略u 发表于 2024-3-31 16:47 | 显示全部楼层
汇编指令:饱和运算

  1、Cortex-CM3的饱和运算指令分为两种:带符号的饱和运算以及无符号饱和运算。



  2、饱和运算指令

8482666092338067f4.png
 楼主| 略略u 发表于 2024-3-31 16:48 | 显示全部楼层
Cortex-CM3中一些有用的新指令

  1、MSR和MRS

   1)、这两条指令是访问特殊功能寄存器的指令,必须在特权下访问,出APSR外。

   2)、指令语法如下:

          MRS    <Rn>,     <SReg>  ;   加载特殊功能寄存器的值到Rn

          MSR    <SReg>,     <Rn>  ;   存储Rn的值到特殊功能寄存器的值

   3)、SReg可以是下表中的一个
48614660923468f9c4.png
 楼主| 略略u 发表于 2024-3-31 16:48 | 显示全部楼层
2、IF-THEN

   1)、IF-THEN指令围成一个块,里面最多4条指令,它里面的指令可以条件执行。

   2)、IT使用形式:
771866609235a4001b.png
 楼主| 略略u 发表于 2024-3-31 16:48 | 显示全部楼层
3、CBZ和CBNZ

   1)、比较并条件跳转指令专为循环结构的优化而设,它只能做向前跳转。

   2)、格式为

    81905660923649811b.png
 楼主| 略略u 发表于 2024-3-31 16:48 | 显示全部楼层
、SDIV和UDIV

   1)、32位硬件除法指令。

   2)、格式
613056609237044057.png
 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
3)、运算结果是Rd = Rn / Rm。



  5、REV,REVH,REV16以及REVSH

   1)、REV反转32位整数中的字节序,REVH则以半字节为单位反转,且只反转低半字节。

   2)、REVSH在REVH的基础上,还把反转后的半子做带符号的扩展。

   3)、语法

175536609237cee950.png
 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
  6、RBIT

   1)、RBIT比以前的REV之流更为精细,它是按位反转的,相当于把32位整数的二进制表示法水平旋转180°。此指令在处理串行比特流大有用处。

   2)、格式

        RBIT.W    Rd,    Rn



  7、SXTB,SXTH,UXTB,UXTH

   1)、这四条指令是为了优化C的强制数据类型转换而设的,把数据宽度转换为处理器喜欢的32位长度。

   2)、语法
133886609239326090.png


   3)、对于SXTB/SXTH,数据带符号位扩展成32位整数。对于UXTB/UXTH,高位清0。

 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
  8、BFC/BFI,UBFX/SBFX

   1)、这四个指令是Cortex-CM3提供的位段操作指令。

   2)、BFC(位段清零)指令把32位整数任意一段连续的二进制位S清0,语法格式为:

           BFC    Rd,    #lsb,    #width

   3)、BFI(位段插入指令),则把某寄存器按LSB对齐的数据,拷贝到另一个寄存器的某个位段中,其格式为:

           BFI.w    Rd,    Rn,    #lsb,    #width

    4)、UBFX/SBFX都是位段提取指令,语法格式为:

           UBFx.w    Rd,    Rn,    #lsb,    #width

          SBFX.w    Rd,    Rn,    #lsb,    #width

 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
LDRD/STRD

   1)、Cortex-CM3在一定程度上支持对64位整数,其中LDRD/STRD就是为64位整数的数据传输而设置的。

   2)、格式:
72358660923a8a6bff.png
 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
  10、TBB,TBH

   1)、TBB(查表跳转字节范围的偏移量)指令和TBH(查表跳转半字节范围的偏移量)指令,分别用于从一个字节数组表中查找偏移地址,和从半字节数组表中查找偏移地

            址。TBB的跳转范围为255*2+4=514,TBH的跳转范围为65535*2+4=128kb+2。

   2)、TBB语法格式

             TBB.W    [Rn,   Rm]    ;PC+=Rn[Rm]*2

   3)、TBH语法格式   

             TBH.W    [Rn,   2*Rm]    ;PC+=Rn[2*Rm]*2
 楼主| 略略u 发表于 2024-3-31 16:49 | 显示全部楼层
一、存储器系统的功能概览

  1、Cortex-CM3存储器系统功能

   1)、存储器映射是预定义的,并且还规定好了那个位置使用那条总线。

   2)、Cortex-CM3的存储器系统支持“位带”操作。

   3)、Cortex-CM3存储器系统支持非对齐访问和互斥访问。

   4)、Cortex-CM3的存储器系统支持both大端配置和小端配置。

 楼主| 略略u 发表于 2024-3-31 16:50 | 显示全部楼层
二、存储器映射

  1、Cortex-CM3只有一个单一固定的存储器映射。这极大方便了软件在各种Cortex-CM3单片机间的移植。



  2、存储器的一些位置用于调试组件等私有外设,这个地址被称为“私有外设区”。私有外设区的组件包括:

   1)、闪存地址重载及断点单元(FPB)。

   2)、数据观察点单元(DWT)。

   3)、指令跟踪宏单元(ITM)。

   4)、嵌入式跟踪宏单元(ETM)。

   5)、跟踪端口接口单元(TPIU)。

   6)、ROM表。
 楼主| 略略u 发表于 2024-3-31 16:50 | 显示全部楼层
3、Cortex-CM3的地址空间是4GB,程序可以在代码区,内部SRAM区以及RAM区执行。4GB粗线条划分:
34330660923cc2ef3c.png
   1)、内部SRAM区的大小是512MB,用于让芯片制造商连接片上的SRAM,这个区通过系统总线来访问。在此区的下部,有一个1MB的位带区,该位带区还有一个对应的

             32MB的“位带别名区”,容纳了8M个“位变量”。位带区对应的是最低的1MB地址范围,而位带别名区里面的每个字对应位带区的一个比特。位带操作只适用于数据访问,

             不适用与取指操作。

   2)、地址空间另一个512范围由片上外设(的寄存器)使用。这个区也有一条32MB的位带别名,以便于快捷的访问外设寄存器。

   3)、还有两个1GB的范围,分别用于连接外部RAM和外部设备,它们之间没有位带。两者的区别在于外部RAM区允许执行指令,而外设设备区则不允许。

   4)、最后剩下0.5GB的地带是Cortex-CM3内核所在区域,包括系统级组件,内部私有外部总线S,外部私有外部总线S,以及由提供者定义的系统外设。

   5)、私有外部总线有两条

    I、AHB外设总线,只用于Cortex-CM3内部的AHB设备,它们是:NVIC,FPB,DWT和ITM。

    II、APB外设总线,即用于Cortex-CM3内部的APB设备,也用于外部设备

   6)、NVIC所处的区域叫做“系统控制空间(SCS)”在SCS里面还有SysTick、MPU以及代码调试控制所用的寄存器:

31465660923dda2640.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部