Android SO ARM及Thumb2指令集

编程入门 行业动态 更新时间:2024-10-28 07:33:47

Android SO ARM及Thumb2<a href=https://www.elefans.com/category/jswz/34/1766218.html style=指令集"/>

Android SO ARM及Thumb2指令集

   0x01 ARM寄存器

    1.1 通用寄存器

    1.未分组寄存器:R0~R7

    2.分组寄存器:R8~812
    R13:SP,常用作堆栈指针,始终指向堆栈的顶部,当一个数据(32位)推入堆栈时,SP(R13的值减4)向下浮动指向下一个地址,即新的栈顶,当数据从堆栈中弹出时,SP(R13的值加4)向上浮动指向新的栈顶。
    R14:连接寄存器(LR),当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份,其他情况下,R14用作通用寄存器。


    1.2 状态寄存器

    CPSR(R16):当前程序状态寄存器,用来保存ALU中的当前操作信息,控制允许和禁止中断、设置处理器的工作模式等。
    SPSRs:五个备份的程序状态寄存器,用来进行异常处理。当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时可由SPSR来恢复CPSR。


    N、Z、C、V均为条件码标志位,他们的内容可被运算的结果所改变。  

    N:正负标志,N=1表示运算的结果为负(最高位为1),N=0表示运算的结果为正或0(最高位为0)

    Z:零标志,Z=1表示运算的结果为0,Z=0表示运算的结果为非0 

    C:进位标志,产生了进位时则C=1,否则C=0
    V:溢出标志,V=1表示有溢出,V=0表示无溢出


    1.3 那么如何判断产生进位和溢出呢?

    溢出与进位是针对加法而言

    溢出
        负数用补码表示,只有相加操作,x,y指的是相加操作的两个数
         设:
             x 为第一个加数的符号位
             y 为第二个加数的符号位
             r 为结果的符号位
         那么:
             xy = 00 r=1,溢出,r=0,未溢出
             xy = 11 r=0,溢出,r=1,未溢出
             xy = 10 不会溢出
             XY = 01  不会溢出

    进位
         负数用补码表示,只有相加操作,x,y指的是相加操作的两个数
         设:
             x 为第一个加数的符号位(准确点,这时应叫做最高位)
             y 为第二个加数的符号位
             r 为结果的符号位
         那么:
             xy = 00 决不会产生进位
             xy = 11 一定会进位
             xy = 10  r = 0 ,有进位,r = 1,无进位
             XY = 01  r = 0 ,有进位,r = 1,无进位


    1.4 地址空间

    程序正常执行时,每执行一条ARM指令,当前指令计数器增加4个字节。当前的PC执行PC + 2 * 4 = PC + 8的地址。

   

   0x02 ARM汇编语言

    2.1 汇编指令格式
    <opcode>{<cond>}{S}<Rd>,<Rn>{,<OP2>}
    格式中<>的内容必不可少,{}中的内容可省略
    <opcode>:表示操作码,如ADD表示算术加法
    {<cond>}:表示指令执行的条件域,如EQ、NE等
    {S}:决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行的结果影响CPSR的值,否则不影响
    <Rd>:表示目的寄存器
    <Rn>:表示第一个操作数,为寄存器
    <op2>:表示第二个操作数,可以是立即数、寄存器或寄存器移位操作数

    例子:ADDEQS R0,R1,#8;其中操作码为ADD,条件域cond为EQ,S表示该指令的执行影响CPSR寄存器的值,目的寄存器Rd为R0,第一个操作数寄存器Rd为R1,第二个操作数OP2为立即数#8。


    2.2 指令的条件执行
    指令的条件后缀只是影响指令是否执行,不影响指令的内容。

条件码助记符后缀标志含义
0000EQZ置位相等
0001NEZ清零不相等
0010CSC指令无符号数大于或等于
0011CCC清零无符号数小于
0100MIN置位负数
0101PLN清零正数或零
0110VS

更多推荐

Android SO ARM及Thumb2指令集

本文发布于:2024-03-14 21:00:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737318.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:指令集   Android   ARM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!