浅谈汇编

创建编写汇编文件:

首先创建一个空文件

 

 命名方式以.s结尾

第一行需要声明一个代码段  .text

第二行声明一个global + 方法名    .global test

 

 指令:

汇编代码注释在行前加上 ;

  • ret:返回
  • mov指令:目的寄存器,源操作数   举例:mov x0, #0x8   将8赋值给x0
  • add指令:将两个寄存器相加
  • sub指令:将两个寄存器相减
  • cmp指令:比较指令 操作数1  操作数2:cmp x0, x1  用x0减去x1,并将结果放到cpsr(程序状态寄存器)寄存器里
  • b 指令:跳转指令,相当于jump   b 目标地址
  • bl指令:带返回的跳转指令,与b指令的区别是使用bl指令,ret指令才会生效

内存操作:

1、load,从内存中装载数据

  • ldr指令:从内存中读取数据  ldr  x0, [x1]
  • ldur指令:,一般如果数据为负数,会用ldur
  • ldp指令:从内存中读取数据,放到一对寄存器中  ldp w0, w1, [x2, #0x10]

2、store,往内存中存储数据

  • str指令:往内存中写入数据   str w0, [x1],将w0的数据写入到x1中
  • stur指令:参考ldur指令
  • stp指令:参考ldp指令
  • wzr指令:零寄存器
  • xzr指令:零寄存器

程序计数器:

  • pc(Program Counter)
  • 记录CPU当前指令是哪一条指令
  • 存储着当前CPU正在执行的指令的地址
  • 类似于8086汇编的IP寄存器

堆栈寄存器:

  • sp(Stack Pointer)
  • fp(Frame Pointer),也就是x29

链接寄存器:

  • lr(Link Register),也就是x30
  • 存储着函数的返回地址

条件域:

指令的条件码:

  • EQ:equal,相等
  • NE:not equal,不相等
  • GT:great than,大于
  • GE:great equal,大于等于
  • LT:less than,小于
  • LE:less equal,小于等于

 

 

CPSR寄存器-状态寄存器

 

 

 

 

posted on 2019-11-26 11:21  Jacksun1  阅读(603)  评论(0编辑  收藏  举报

导航