博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARM汇编指令特点
阅读量:6249 次
发布时间:2019-06-22

本文共 1475 字,大约阅读时间需要 4 分钟。

根据朱有鹏老师课程笔记整理而来:  

 

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

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

两种不同风格的ARM指令

  ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]

  GNU风格的ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]

ARM汇编特点1LDR/STR架构

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

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

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

  ldr/str组合用来实现 ARM CPU和内存数据交换。

ARM汇编特点2:8种寻址方式

  寄存器寻址                     mov r1, r2

  立即寻址                         mov r0, #0xFF00

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

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

             [r2] 这一整体表示一个内存地址   内存地址在r2里面存放       r2相当于一个指针    指令的意思是把这个内存地址里面的值赋给r1

  基址变址寻址                 ldr r1, [r2, #4]                   表示在r2里面地址的基础上加4依次为地址  并取此地址里面的值赋给r1

  多寄存器寻址                 ldmia r1!, {r2-r7, r12}       r1里面的内存地址为基地址,从这个地址读出数据依次放在r2-r7以及r12中

  堆栈寻址                       stmfd sp!, {r2-r7, lr}          从栈地址连续访问数据放在寄存器中

  相对寻址                       beq flag

          Flag:  

ARM汇编特点3:指令后缀

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

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

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

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

  如 ldr ldrb ldrh ldrsb ldrsh

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

  如 mov和movs        movs r0, #0

ARM汇编特点4:条件执行后缀

       ARM汇编语句中.当前语句很多时候要隐含的使用上一句的执行结果.而且上一句的执行结果,是放在CPSR寄存器里,(比如说进位,为0,为负…)

       CMP R0,R1

       BNE NoMatch

       比如上一句,BNE隐含的使用的上一句CMP执行结果.NE后缀表示使用Z标志位.两句合起来的意思就是,如果R0,R1的值不相等,就跳转到NoMatch处执行.

       注意,PC=R15,CPSR=R16

                  

ARM汇编特点5:多级指令流水线

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

                 

PC指向正被取指的指令,而非正在执行的指令

转载于:https://www.cnblogs.com/ylhwx/p/7828120.html

你可能感兴趣的文章
Unix/Linux Shell正则表达式
查看>>
tar包方式安装samba服务器及其相关配置
查看>>
Lync部署之存档监控服务器
查看>>
全面测试1.235用后感(新手要入来学野了哟)高手免进
查看>>
vs2012更新版本到3 出现异常
查看>>
Windows域环境下部署ISA Server 2006防火墙(三3)
查看>>
exchange部署在不同服务器上的一些区别
查看>>
Spring MVC 图片上传和下载
查看>>
我的友情链接
查看>>
nginx配置
查看>>
js获取本周、本季度、本月、上月的开端日期、停止日期
查看>>
day18 java 语言中的Map集合
查看>>
APP公共测试点
查看>>
remote tools
查看>>
技术流, 又充满争议的网站
查看>>
你可能还不知道的7个jQuery插件
查看>>
Grails 技巧 - Grails and Hibernate
查看>>
Github使用教程(一)--搭建Github环境
查看>>
Spring 事务使用详解
查看>>
九款可免费下载的app导航条
查看>>