嵌入式学习笔记-汇编指令03

  1. 协处理器(coprocessor)
    协处理器是用来减轻cpu负担只执行特定指令的处理器
    arm微处理器可支持多达16个协处理器,用于协处理操作
    但是一般只附带最后一个处理器cp15
    协处理器和MMU,TLB,cache等处理有关
    通过这两个指令mcr/mrc 与协处理器进行指令传输
    嵌入式学习笔记-汇编指令03_第1张图片
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #00002000  @clear bits v
bic r0, r0, #00000007  @clear bits CAM
orr r0, r0, #00000002  @set bit A
orr r0, r0, #00000800  @set bit Z
mcr p15, 0, r0,c1, c0, 0
  1. 访存指令详解
    在只需要进行单字传输时,用ldr和str进行访存即可
    当需要与内存见的大量信息传输时就需要用到ldm/stm两条指令了
    ldm/stm r0,{r1,r2,r3}
    嵌入式学习笔记-汇编指令03_第2张图片

    指令后缀

    1. ia (increase after) 先将数据写入,再增加地址
    2. ib (increase before)先增加地址,再写入数据
    3. da (decrese after)先将数据写入,再减少地址
    4. db (decrese before)先减少地址,再写入数据
    5. fd (full decrease) 满减栈
    6. fa (full decrease) 满增栈
    7. ed (empty add) 空减栈
    8. ea (empty add) 空增栈
      减栈:地址逐渐减少
      增栈:地址逐渐增加
      空栈:指针直接指向目标地址,即指向地址的内存空间内没有存放数据
      满栈:指针指向上次的最后一个地址,需要偏移后才指向目标地址,即指向地址的内存空间内存放了上一次写入的最后一个数据
  2. !与^

    1. !是在ldm过程中的增加或减少写会到目标寄存器中去
    2. ^的作用是,在目标寄存器中有pc时,会同时将spsr写入到cpsr
      一般用于异常模式
	ldmia  r0,{r2-r3}     @r0地址不偏移
	ldmia  !r0,{r2-r3}	 @装填完成后的地址赋给r0
ldmfd  sp!,{r0-r6,pc}
ldmfd  sp!,{r0-r6,pc}^  @将spsr恢复到cpsr
  1. 细节了解
    1. MMU处理器:实现虚拟内存有两方面的工作:一是高效的管理线性地址和物理地址的映射关系;二是严格的内存访问权限检测机制。于是,现在的CPU处理器就引入了MMU硬件模块来处理这两个问题。
      在没有MMU的处理器中,CPU内部执行单元产生的内存地址信号就是物理地址,将被直接通过地址总线发送到芯片引脚,被内存芯片接收。在有MMU且启用的处理器中,CPU执行单元产生的地址信号是虚拟地址,其在被发送到内存芯片之前将被MMU截获,MMU会负责把虚拟地址翻译成物理地址,然后发到内存芯片地址引脚上。

你可能感兴趣的:(嵌入式学习笔记)