美文网首页工作生活
01.ARM - 指令与寄存器

01.ARM - 指令与寄存器

作者: 柏666 | 来源:发表于2019-07-02 22:44 被阅读0次

    一、ARM指令格式:<opcode> {<cond>} {S} <Rd> ,<Rn>{, <opcode2>}

    格式

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

                    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位,那么这个数就是立即数,反之就不是立即数。

    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个。与此对应的汇编名称表明了它们通常的约定用法。

    各个寄存器

            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],又名控制位。区域名必须为小写字母。

    PSR寄存器数据格式

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

            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 {<condition>} rd, cpsr

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

                    ②、msr {<condition>} cpsr_<fields>, #immediate

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

                            immediate是作为参数的立即数。


    相关文章

      网友评论

        本文标题:01.ARM - 指令与寄存器

        本文链接:https://www.haomeiwen.com/subject/wbmhhctx.html