ARM指令

一、开发工具
    1、ADS(ARM Developer Suite):
        ARM公司的ARM集成开发环境,包括命令行开发工具、GUI开发环境、支持软件
        **注:ADS包括AXD和CodeWarrior,前者用于使用Jtag、HJtag等工具硬件调试程序,后者用于编译代码
    2、COdeWarrior的配置要点:
        A、
        B、
        C、
    3、AXD的配置要点:
        A、
        B、
        C、
二、ARM基础知识:
    1、存储器格式:
        大端模式:字数据高字节存储在低地址,低字节存储在高地址
        小端模式:字数据高字节存储在高地址,低字节存储在低地址
    2、指令长度:
        ARM状态:32位
        Thumb状态:16位
        数据类型:支持字节(8位)、半字(16位)、字(32位)
        数据对齐:字 4字节对齐(地址低两位为0);半字 2字节对齐(地址最低两位为0)
    3、工作模式:
        A、用户模式(usr):正常执行程序
        B、快速中断模式(FIQ):高速数据传输
        C、外部中断模式(IRQ):通常的中断处理
        D、管理模式(svc):操作系统使用的保护模式
        E、数据访问种植模式(abt):数据或指令终止时进入该模式,可用于虚拟村吃及存储保护
        F、系统模式(sys):运行具有特殊权限的操作系统任务
        G、未定义指令终止模式(und):未定义的指令执行时进入该模式,可用于支持硬件
        **注:    运行模式可以通过软件或者外部中断或异常处理改变;
            BCDEFG模式又称为非用户模式或者特权模式;
            除用户模式和系统模以外的模式又称为异常模式
    4、寄存器:
        A、ARM微处理器有37和32位寄存器,31个通用,6个状态寄存器。
           寄存器不能同时访问,不同状态对用不同寄存器;
           通用和寄存器R14-R0、程序计数器PC、某状态对应的状态寄存器任何时候可访问;
           非用户模式下,可访问特定模式分组寄存器
           **注:Rx寄存器和Rx_irq之类的寄存器是不同的寄存器
        B、通用寄存器:
            R0~R15    
            R13_svc    R13_abt        R13_und        R13_irq
            R14_svc    R14_abt        R14_und        R14_irq        
            R8_fig~R14_fig
            不分组寄存器:R0~R7
            分组寄存器:R8~R14
            程序计数器:R15(PC)
           **注:
            R13通常作为堆栈指针SP
            R14用作子程序链接寄存器,也称LR,指向函数的返回地址
            R15寄存器的值等于当前执行的指令地址+8(多了译码阶段)
        C、状态寄存器:
           所有工作模式下都可以访问程序状态寄存器CPSR
           CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息
           CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR
           当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态
        D、CPSR/SPSR(同格式):
            M0-M4:模式位;
            T:工作状态位    【1:Thumb    0:ARM
            】
            F:FIQ中断禁止位【1:禁止    0:允许】
            I:IRQ中断禁止位【1:禁止    0:允许】
            bit8-bit27:保留位
            //以下为条码标志位
            V、OverFlow(溢出等)
            C、Carry
            Z、Zero
            N、Negative
    5、ARM寻址方式:
        A、寻址的概念:处理器根据指令中给出的地址信息来寻找物理地址的方式。
        B、立即寻址(立即数寻址):操作数本身在指令中给出,只要取出指令也就取到了操作;
           只要取出指令也就取到了操作数,此操作数被称为立即数,对应的寻址方式叫立即寻址
           例如以下指令:
               ADD R0,R0,#1 ;R0←R0+1
              ADD R0,R0,#0x3f ;R0←R0+0x3f
               说明:在以上两条指令中,第二个源操作数即为立即数,要求以
               “#”为前缀,对于以十六进制表示的立即数,还要求在
               “#”后加上“0x”或“&”。
    6、寄存器寻址:
        A、概念:利用寄存器中的数值作为操作数
        B、特点:各类微处理器经常采用;效率较高的寻址方式
        eg:    ADD R0,R1,R2 ;R0←R1+R2
        说明:    该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中
    7、寄存器间接寻址:
        A、概念:以寄存器中的值作为操作数的地址,操作数本身存放在存储器中
        eg:    ADD R0,R1,[R2] ;R0←R1+[R2]
            LDR R0,[R1] ;R0←[R1]
        说明:    第一条指令中,以寄存器【R2的值作为操作数的地址】,在存储器中取得一个操作数后与R1相加,结果存
            入寄存器R0中。
            第二条指令将以R1的值为地址的存储器中的数据传送到R0中
    8、变址寻址:
        A、概念:将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,
             从而得到一个操作数的有效地址
        eg:    LDR R0,[R1,#4] ;R0←[R1+4]
            LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
            LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
            LDR R0,[R1,R2] ;R0←[R1+R2]
    9、多址寻址:
        A、概念:一条指令可以完成多个寄存器值的传送。一条指令完成传送最多16个通用寄存器的值
        eg:    LDMIA R0,{R1,R2,R3,R4} ;R1←[R0] R2←[R0+4] R3←[R0+8] R4←[R0+12]
        说明:    该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加,
            因此,指令可将连续存储单元的值传送到R1~R4。
    10、相对寻址:
        A、概念:以程序计数器PC当前值为基地址,指令中地址标号作为偏移量,两者相加得到操作数的有效地址
        eg:    BL NEXT     ;跳转到子程序NEXT处执行
            ……
            NEXT
            ……
            MOPC,LR     ;从子程序返回
        说明:    上述程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式
    11、堆栈寻址:
        A、概念:堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,
             堆栈指针总是指向栈顶。
             *递增堆栈:向高地址方向生长
             *递减堆栈:向低地址方向生长
             *满堆栈:堆栈指针指向最后压入堆栈的有效数据项
             *空堆栈:堆栈指针指向下一个要放入数据的空位置
三、ARM指令集与编程
1、跳转指令:
    A、用途:实现程序流程的跳转
    B、实现方法:
        在ARM程序中有两种方法可以实现程序流程的跳转:
        -使用专门的跳转指令
        -直接向程序计数器PC写入跳转地址值,可实现在4GB的地址空间中的任意跳转;
         在跳转之前结合使用MOLR,PC等类似指令,可保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用
    C、ARM中的跳转指令:
        -ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转
        -包括以下4条指令:
            B 跳转指令
            BL 带返回的跳转指令
            BLX 带返回和状态切换的跳转指令
            BX 带状态切换的跳转指令
    D、ARM跳转指令详解:
      -B指令
      格式:B{条件}    目标地址    【注意:{}表示条件可有可无】
      说明:最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。
      eg:    B Label        ;程序无条件跳转到标号Label处执行
          CMP R1,#0
          BEQ Label    ;当CP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
x86和ARM指令集是两种常见的计算机体系结构的指令集架构。它们都用于指导计算机硬件执行特定的任务和操作。以下是关于x86和ARM指令集的一些简要信息: x86指令集:x86是一种基于CISC(复杂指令集计算)体系结构的指令集。该指令集最初由英特尔开发,并成为主要的个人计算机和服务器体系结构。x86指令集包含丰富的指令,可执行多种操作,包括算术运算、逻辑运算、数据传输和控制流等。它是一种复杂的指令集,并且具有较高的执行能力和灵活性。凭借广泛的软件支持和计算能力,x86成为桌面和服务器领域最流行的体系结构之一。 ARM指令集:ARM是一种基于RISC(精简指令集计算)体系结构的指令集。它最初由英国公司ARM Holdings开发,并成为移动设备(如智能手机和平板电脑)和嵌入式系统的主要体系结构。ARM指令集设计简洁,指令数量较少,每条指令一般只执行一个简单的操作。与x86相比,ARM指令集执行效率更高,并具有更低的功耗和较小的芯片面积。因此,它成为便携式设备和嵌入式系统中的首选体系结构。 x86和ARM的比较:x86指令集适用于大型多任务处理、复杂的图形操作和计算密集型任务。它具有广泛的软件生态系统和令人称赞的性能。然而,由于复杂指令集的特性,x86架构的芯片更复杂、功耗较高,并且相对较贵。 相比之下,ARM指令集在低功耗设备方面表现出色。ARM芯片的功耗较低,性能较高,并且在移动设备和嵌入式系统中能够提供高度集成的解决方案。此外,由于ARM芯片广泛采用,其生态系统和软件支持也非常庞大。 总结而言,x86和ARM指令集都有各自的优势和适用场景。x86适用于高性能和复杂任务的计算机系统,而ARM则适用于低功耗和便携设备的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值