汇编指令~ARM-v7

为了有类别的描述,采用思维导图的方式

汇编指令ARM-V7
    数据操作指令
        数据搬移指令
            mov    mvn   伪指令 ldr
        算数运算指令
            add(普通加法指令) adc(带进位标志位的加法指令) sub(普通减法指令) sbc(带借位的减法指令) mul(乘法指令)
        移位操作指令
            lsl:逻辑(无符号)左移 (高位移出,低位补0)       lsr:逻辑(无符号)右移 (低位移除,高位补0)       asr:算数(有符号)右移(低位移出,次高位补符号位) ror:循环右移(低位移出,补到高位)     
        位运算指令
            and(与) orr(或) eor(异或) bic(位清除)              与0清0,与1不变  或1置1,或0不变           异或1取反,异或0不变
        比较指令
            cmp cmn                @ 1> 没有目标寄存器, @ 2> 指令的执行结果影响的是CPSR的NZCV位,不需要加S @ 3> 比较指令的本质就是做减法运算 @ 4> 比较指令会和条件码配合使用
    跳转指令
        b bl              b : 执行跳转指令时,不保存返回地址到LR寄存器中 @ 有去无回时,使用b跳转指令                             bl : 执行跳转指令时,自动保存返回地址到LR寄存器中          返回地址:跳转指令的下一条指令的地址。               有去有回,使用bl跳转指令,比如:函数的调用      跳转指令的本质是:修改PC值
    Load/Store内存读写指令
        单寄存器读写操作指令
            单寄存器读操作指令:ldr/ldrh/ldrb          格式:ldr/ldrh/ldrb Rn, [Rm]        @ Rm寄存器中的数据将被看成一个内存的地址 @ 将Rm指向的地址空间中的内容读到Rn寄存器中 @ 类似于int a = *p
               str/strh/strb              格式:str/strh/strb Rn, [Rm]    @ Rm寄存器中的数据将被看成一个内存的地址 @ 将Rn寄存器中的数据写到Rm指向的地址空间中, @ 类似于*p = a;
        多寄存器读写操作指令
            ldm stm          语法格式:ldm/stm Rm, {寄存器列表}           @ 1> Rm中的数据看成一个内存的地址 @ 2> ldm : 将Rm指向的连续空间的内存读到 寄存器列表的每个寄存器中 @ 3> stm : 将寄存器列表中的寄存器中的数据写到以Rm为起始地址的连续空间中 @ 4> 寄存器列表中的寄存器如果连续,使用“-”隔开。 @ 5> 如果不连续使用“,”隔开。
        栈空间读写操作指令
            栈的种类
                空栈:栈指针指向的栈空间没有有效的数据, 压栈时可以直接将数据压入栈空间中, 需要再次将栈指针指向一个空的空间。              满栈:栈指针指向的栈空间有有效的数据, 压栈时需要先移动栈指针指向一个空的栈空间, 在压入数据,此时栈指针指向的仍然是一个有有效数据的栈空间。                                                              增栈:压栈时栈指针向高地址方向移动, 出栈时栈指针向低地址方向移动。                                                                                     减栈:压栈时栈指针向低地址方向移动, 出栈时栈指针向高地址方向移动
            栈的操作方法
                满增栈 : stmfa/ldmfa full ascending                                           满减栈 : stmfd/ldmfd full descending                                      空增栈 : stmea/ldmea empty ascending                                  空减栈 : stmed/ldmed empty descending                               ARM处理器默认采用的是满减栈
            满减栈操作
                @ 语法格式:ldmfd/stmfd sp!, {寄存器列表}                             @ 1> sp中的数据看成一个内存的地址                                        @ 2> ldmfd : 将sp指向的连续栈空间的内存读到寄存器列表的每个寄存器中                                                                                @ 3> stmfd : 将寄存器列表中的寄存器中的数据写到以sp为起始地址的连续栈空间中                                                                    @ 4> 寄存器列表中的寄存器如果连续,使用“-”隔开。            @ 5> 如果不连续使用“,”隔开。                                             @ 6> 更新栈指针指向的地址空间。                                             @ 7> 寄存器列表中的寄存器的顺序不管怎样写,永远都是小编号的寄存器对应低地址,大编号的寄存器对应高地址。编译器要求寄存器列表中的顺序从小到大书写。
    swi软中断指令
    特殊功能寄存器读写操作指令

汇编指令~ARM-v7_第1张图片

 

你可能感兴趣的:(arm,html5,自动驾驶)