当前位置: 首页 > news >正文

ARM汇编1

一. 指令和伪指令

  1.1. 指令

    a. (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。

  1.2. 伪指令

    b. (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。

 二. 两种不同风格的ARM指令

  1.1. ARM官方的ARM汇编风格

    a. 指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]

  1.2. GNU风格的ARM汇编

    a. 指令一般用小写字母、linux中常用。如:ldr r0, [r1]

三.ARM汇编要点

  3.1. LDR/STR架构

    3.1.1. ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。

    3.1.2. ldr(load register)指令将内存内容加载入通用寄存器。

      示例:ldr R0, [R1, #8]   将地址R1 + 8的字数据读入以R0存储器中

           ldr R0, [R1], #8 将R1的数据读入到R0,并将R1 + 8的值存入R1

    3.1.3. str(store register)指令将寄存器内容存入内存空间中。

      示例: str R0, [R1, #8]   将R0中的数据写入以R1 + 8为地址的存储器中

         str R0, [R1], #8   将R0的数据 + 8后存入R1地址的存储器中

  3.2. 7种寻址方式

    3.2.1. 寄存器寻址 mov r1, r2

    3.2.2. 立即寻址 mov r0, #0xFF00

    3.2.3. 寄存器移位寻址 mov r0, r1, lsl #3

    3.2.4. 寄存器间接寻址 ldr r1, [r2]

    3.2.5. 基址变址寻址 ldr r1, [r2, #4]

    3.2.6. 多寄存器寻址 ldmia r1!, {r2-r7, r12}

    3.2.7. 堆栈寻址 stmfd sp!, {r2-r7, lr}

  3.3.指令后缀

    3.3.1. 同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:

      a. B(byte)功能不变,操作长度变为8位

      b. H(half word)功能不变,长度变为16位

      c. S(signed)功能不变,操作数变为有符号

      d. S(S标志)功能不变,影响CPSR标志位

      示例: ldrb ldrh ldrsb ldrsh movs

  3.4. 条件执行后缀

  3.5. 多级指令流水线 

    3.5.1. 为增加处理器指令流的速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。(S5PV210使用13级流水线,ARM11为8级) 允许多个操作同时处理,而非顺序执行。

      

参考《朱老师.1.2ARM裸机课件》

 

转载于:https://www.cnblogs.com/linux-37ge/p/10212084.html

相关文章:

  • OGL(教程40)——Stencil Shadow Volume
  • OGL(教程41)——物体运动模糊
  • Django rest_framework 总结
  • Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
  • vs打开unity里的vs文件,但是无法正确加载项目的其他文件
  • java多线程-基础
  • wordpress在撰写新文章界面的显示选项按钮点击无反应的解决办法
  • opengl——贴图
  • learnopengl——Framebuffers
  • learnopengl——纹理
  • [转帖]Application Request Route实现IIS Server Farms集群负载详解
  • learnopengl——三角形
  • songho——OpenGL的帧缓冲
  • while 循环 及 and or not
  • songho——OpenGL的顶点缓冲对象
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2018一半小结一波
  • CentOS 7 修改主机名
  • JavaScript实现分页效果
  • Map集合、散列表、红黑树介绍
  • node-glob通配符
  • text-decoration与color属性
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 从setTimeout-setInterval看JS线程
  • 精彩代码 vue.js
  • 深度学习入门:10门免费线上课程推荐
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微服务入门【系列视频课程】
  • 异常机制详解
  • MyCAT水平分库
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2)Java 简介
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ibm)Java 语言的 XPath API
  • (补)B+树一些思想
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (算法)N皇后问题
  • (未解决)macOS matplotlib 中文是方框
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET企业级应用架构设计系列之结尾篇
  • .py文件应该怎样打开?
  • :如何用SQL脚本保存存储过程返回的结果集
  • @EnableAsync和@Async开始异步任务支持
  • @PreAuthorize注解
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Bugku]密码???[writeup]
  • [codevs 1515]跳 【解题报告】