01.ARM - 指令与寄存器

一、ARM指令格式: {} {S} ,{, }

格式

                <>:内项目必选。{}:内项目可选。

                opcode:指令助记符(ldr str等)。

                cond:条件码,描述指令执行条件。

                S:可选后缀,带" S "表示指令执行完后,自动更新CPSR中的条件码标志位的值。

                Rd:ARM指令中的目标操作数总是一个寄存器,通常用Rd表示。

                Rn:存放第1操作数寄存器。

                opcode2:第2操作数,可以是寄存器或立即数,且能使用经过位移运算后的寄存器和立即数。

        立即数:用高4位 + 低8位表示,rotate + immed_8。立即数 = immed_8 循环右移 (2 * rotate)位。可以用下列方法判断立即数:

        1、把数据转换成二进制,从低到高写成4位1组的形式,最高位一组不够四位的,在最高位之前补0。

        2、数1的个数,如果大于8个肯定不是立即数,如果小于等于8进行下面步骤。

        3、如果数据中间有连续的大于等于24个0, 循环左移4的倍数,使高位全为0。

        4、找到最高位的1,去掉前面最大偶数个0。

        5、找到最低位的1,去掉后面最大偶数个0。

        6、数剩下的位数,如果小于等于8位,那么这个数就是立即数,反之就不是立即数。

01.ARM - 指令与寄存器_第1张图片
ARM Instruction Set Format



二、ARM中的寄存器:ARM共37个寄存器,可工作于7种模式:

        未分组寄存器r0-r7所有模式共用,共8个。

        分组寄存器中r8-r12,快速中断模式有自己的一组寄存器,其他模式共用,共10个。

        分组寄存器r13(sp),r14(lr),除用户模式和系统模式共用外,其他模式各一组,共 2*7 - 2 = 12个。

        r15(pc)和CPSR共用,共2个。

        SPSR除用户模式和系统模式没有外,其他模式各一个,共5个。总共8+10+12+2+5 = 37个。与此对应的汇编名称表明了它们通常的约定用法。

01.ARM - 指令与寄存器_第2张图片
各个寄存器

        1、r0-r3:临时寄存器。保存参数,结果或者寄存器的值。用作传入函数参数,传出函数返回值。在子程序调用之间可随意使用。被调函数返回前不必恢复原值。如果调用函数需要再次使用r0-r3的内容,则它必须保留这些内容。

        2、r4-r11:变量寄存器。存放函数的局部变量。如果被调函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。

        3、r9 (sb):静态基址寄存器。

        4、r10 (sl):堆栈限制寄存器。

        5、r11 (fp):帧指针。

        6、r12 (ip):内部程序调用暂存寄存器。可用于保存SP,在函数返回时使用该寄存器出栈。被调函数返回前不必恢复。

        7、r13 (sp):数据栈指针寄存器。针对不同模式,共有6个SP。通常指向各模式对应的专用堆栈。退出被调用函数时必须恢复。

        8、r14 (lr):子程序连接寄存器。保存执行bl的下一条指令地址(pc)。

        9、r15 (pc):程序计数器。存放下一条指令的地址。

        10、f0-f7:FPA寄存器。s0-s31:VFP单精度寄存器。d0-d15:VFP双精度寄存器。p0-p15:协处理器0-15。c0-c15:协处理器寄存器0-15。

        11、状态寄存器PSR(共用r15)。详见下文!



三、状态寄存器PSR(r15):

        CPSR:当前程序状态寄存器。SPSR:保存的程序状态寄存器。状态寄存器的32位可以分为4个8位的域: f: 指示bits[31 : 24],又名条件标志位域。s: 指示bits[23 : 16],又名状态标志位域。x: 指示bits[15 : 8], 又名扩展位域。c: 指示bits[7 : 0],又名控制位。区域名必须为小写字母。

01.ARM - 指令与寄存器_第3张图片
PSR寄存器数据格式

        1、条件标志位( N,Z,C,V ):可用逻辑、算术、或 MSR 和 LDM 指令操作。处理器会测试这些标志位,以确定是否操作一些指令 (例如:cmp指令会设置Z位,而beq会读取Z位决定操作)。bit31-Bit28是状态位,如下图:

01.ARM - 指令与寄存器_第4张图片

        2、控制位( I,F,T,M ):发生异常时, 这些位将产生相应变化。特权模式下可以通过软件去修改这些位。

                bit7 bit6 中断禁止位:(I=1, IRQ禁止;       F=1, FIQ禁止)

                bit5 状态控制位:(T=0: ARM状态。T=1: Thumb状态)

                bit4-bit0 模式控制位:( M[4:0],这5位组合控制处理器处于什么工作模式,异常体系中会详细讲解)



四、PSR 的操作:

        1、状态寄存器访问指令仅有两条:MRS(状态寄存器 ==> 通用寄存器的传送指令) 和 MSR(立即数/通用寄存器 ==> 状态寄存器的传送指令)。

                ①、mrs {} rd, cpsr

                        condition可缺省,为执行条件码。

                ②、msr {} cpsr_, #immediate

                        fields用来设置状态寄存器中需要操作的位 (f/s/x/c),mrs cpsr_x, r1:表示仅修改cpsr的扩展位。

                        immediate是作为参数的立即数。

01.ARM - 指令与寄存器_第5张图片



你可能感兴趣的:(01.ARM - 指令与寄存器)