zoukankan      html  css  js  c++  java
  • Arm汇编指令集2

    什么是协处理器

    SoC内部另一处理核心,协助CPU实现某些功能,被主CPU调用执行一定任务。

    ARM设计上支持16个协处理器,但是一般SoC只实现其中的CP15(cp就是cooperation processor)。

    协处理器和MMU、cache、TLB等处理有关,功能上和操作系统的虚拟地址映射、cache管理有关。

    协处理器cp15操作指令:mcr & mrc

    mrc用于读取cp15中的寄存器

    mcr用于写入cp15中的寄存器

    多寄存器访问指令

    ldr/str每周期只能访问4字节的内存,如果需要批量读取,写入内存时太慢,解决方案是stm/ldm

    ldm (load register mutiple)

    stm(store register mutiple)

    比如:

    stmia  sp,{r0-r12}

    将r0存入sp指向的内存处(假设为0x30001000);然后地址+4(指向0x30001004),将r1存入该地址;然后地址再+4(指向0x30001008),将r2存入该地址......直到r12内容放入(0x30001030),指令完成。

    一个访存周期同时完成13个寄存器的读写。

    主要还有这个ia这个后缀

    ia(increase after)先传输,再地址+4

    ib(increase before)先地址+4,再传输

    da(decrease after)先传输,再地址-4

    db(decrease before)先地址-4,再传输

    fd(full decrease)满递减堆栈

    ed(empty decrease)空递减堆栈

    fa(……)满递增堆栈

    ea(……)空递增堆栈

    四种栈

    空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出。

    满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入,取出时可以直接取出,然后在移动栈指针。

    增栈:栈指针移动时像地址增加的方向移动的栈。

    减栈:栈指针移动时向地址减小的方向移动的栈。

    !的作用

    ldmia  r0,{r2-r3}

    ldmia  r0! ,{r2-r3}

    感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。

    ^的作用

    ldmfd  sp!,{r0-r6,pc}

    ldmfd  sp!,{r0-r6,pc}^

    ^的作用:在目标寄存器中有pc时,会同时将spsr写入到cpsr。一般用于从异常模式返回。

  • 相关阅读:
    微人事项目-mybatis-持久层
    通过外键连接多个表
    springioc
    Redis 消息中间件 ServiceStack.Redis 轻量级
    深度数据对接 链接服务器 数据传输
    sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取
    sqlserver 索引优化 CPU占用过高 执行分析 服务器检查
    sql server 远程备份 bak 删除
    冒泡排序
    多线程 异步 beginInvoke EndInvoke 使用
  • 原文地址:https://www.cnblogs.com/sanshijvshi/p/10720486.html
Copyright © 2011-2022 走看看