汇编指令的学习1——ARM汇编的特点

来源:互联网 发布:淘宝企业店铺要钱吗 编辑:程序博客网 时间:2024/06/01 07:53

以下内容源于朱友鹏《物联网大讲堂》的课程学习,如有侵权,请告知删除。


1、指令和伪指令

  • 指令是CPU机器指令的助记符,经过编译(汇编器加工)后会得到一串10组成的机器码,可以由CPU读取执行。
  • 伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。

2、两种不同风格的ARM指令

  • ARM官方的ARM汇编风格:指令一般用大写、Windows中IDE开发环境(如ADS、MDK等)常用。如: LDR R0, [R1]
  • GNU风格的ARM汇编:指令一般用小写字母、linux中常用。如:ldr r0, [r1]
3、ARM汇编的特点

(1)ARM汇编特点1:LDR/STR架构

  • ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存中内容加载入CPU中通用寄存器中才能被CPU处理。
  • ldr(load register)指令将内存内容加载入通用寄存器。
  • str(store register)指令将寄存器内容存入内存空间中。
  • ldr/str组合用来实现 ARM CPU和内存数据交换。
  • ldr r0,[r1]  和 str r0,[r1],注意前者是向左,后者是向右。
(2)ARM汇编特点2:8种寻址方式(寄存器之间用mov,内存和寄存器之间用ldr和str)

  • 寄存器寻址 mov r1, r2               @把r2中的内容赋给r1
  • 立即(数)寻址 mov r0, #0xFF00   @#后面直接加数字,#表示后面的是数字
  • 寄存器移位寻址 mov r0, r1, lsl #3   @把r1左移3位后,赋给r0
  • 寄存器间接寻址 ldr r1, [r2]                @r2存的内容是一个地址,[r2]表示该地址的内容。即r2相当指针,[r2]相当指针解引用。
  • 基址变址寻址 ldr r1, [r2, #4]         @r2存的内容是一个地址,该地址加上4,才是真正的地址
  • 多寄存器寻址 ldmia r1!, {r2-r7, r12} @r1相当于数组名,将以其为开始的内容,分别存入后面的寄存器中。
  • 堆栈寻址 stmfd sp!, {r2-r7, lr}    @类似于上述。
  • 相对寻址         beq flag @flag表示标号,表示一个入口点。用pc和相对偏移量,故叫相对寻址。
(3)ARM汇编特点3:指令后缀,同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有:
  • B(byte)功能不变,操作长度变为8位
  • H(half word)功能不变,长度变为16位
  • S(signed)功能不变,操作数变为有符号,如ldr ldrb ldrh ldrsb ldrsh(一般都用ldr,操作长度是4字节)
  • S(S标志)功能不变,影响CPSR标志位,如mov和movs,movs r0, #0@这指令会影响标志位(只要最后运算结果为0,那么z就会为1)
(4)ARM汇编特点4:条件执行后缀

  • 如下面例子:


  • 条件后缀是否成立,取决于该句代码的前一句代码的运行结果。(如果标志z=1,那么该句代码执行(相对这个例子来说))
  • 条件后缀决定了本句代码是否执行,而不会影响上一句代码。
  • 下面常用的是EQ,NE,如beq就是b和eq的组合。



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




0 0
原创粉丝点击