本篇主要记载汇编语言中常用的指令及其代表的含义,实时不断跟新。
CMP
w0 , w1 CMP (compare)的意思是比较的意思 相当于将w0减去w1但是不会改变两个寄存器的值即两个寄存器不会变化,但是其结果会影响cpsr状态寄存器的标记值(nzcv)。
(把一个寄存器的内容和另一个寄存器的内容或立即数进行比较。但不存储结果,只是正确的更改标志。)
BL
跳转到标号处执行
B.LE loc_1000068E0 (标号)
小于判断LE是(less than or equal to)的意思当结果为小于等于的时候跳转执行loc_1000068E0(标号)地址pc寄存器的程序。(配合CMP做if判断)。
B.GE loc_1000068D0(标号)
大于等于判断(great than or equal to)原理同B.LE。
注:LE 和 GE 对应的高级代码是反向的即汇编是大于等于那么实际上高级代码是小于两者互补。
B.GT
比较结果是大于(greater than),执行标号,否则不跳转。
B.LT
比较结果是大于(less than),执行标号,否则不跳转
B.EQ
比较结果是等于(equal to),执行标号,否则不跳转
B.HI
比较结果是无符号大于,执行标号,否则不跳转
adrp x0, 1 计算指定数据地址到当前pc值的相对偏移。操作步骤如下
1. 将1的值,左移12位 1 0000 0000 0000 == 0x1000
2.将PC寄存器的低12位清零 0x1045228b0 ==> 0x104522000
3.将将1 和 2 的结果相加 给 X0 寄存器
注:地址为pc寄存器左边的地址,adrp是找出要获取参数的地址范围,然后下个pc寄存器执行的代码会定位到准确的物理地址。(一般找到范围后下一句会add 后三位的具体地址从而确定具体值)。
LDRSW x9 ,[x8 ,x9 ,lsl #2] 为将以x8寄存器为基地址加上x9寄存器向左偏移两个单位的值后取其地址的值给x9寄存器。
Load Signed Word (extended): loads a word from memory addressed by addr, then sign-extends it into Xt.
读取内存地址的值给寄存器。