• ARM指令集相关知识


      1.ARMv8引入了执行状态机制,分为AArch32和AArch64

    • AArch32为T32(Thumb)和A32(ARM)。
    • AArch64为A64一种指令集

      A64和A32的指令都是32位宽,可以操作64/32位寄存器和64/32位地址总线

      T32技术兼容Thumb和Thumb2指令集,是16/32位混合指令集

          2.在ARMv7后期版本里,引入来Thumb2技术(增加指令个数与位宽,但大多数无条件,可以用it指令带条件,在ARM和Thumb指令之间不需要显示切换状态了),Thumb和ARM指令集被统一位UAL(Unified Assembly Language)语法,即16位汇编指令和32位汇编指令可以无缝的出现在代码里。Thumb和ARM指令本质上一样,只是被编码成不一样的格式。

             Originally, there was only ARM 32-bit instructions (1980-mid 1990s). Then ARM made a mode that was like a compression front-end that expanded a strictly 16bit opcodes to 32 bits. This was thumb mode (mid 1990s to ~2005). Then ARM came out with thumb2 (which is somewhat nebulous) mainly typified by a mix of both 16bit and 32bit instructions (~2005 to current).

    比较老的语法是这样的,用了Thumb2技术后在UAL下不需要了

    ARM、THUMB、THUMBX、CODE16 和 CODE32

    ARM 指令和 CODE32 指令是同义词。 它们使用 UAL 或 Thumb-2 以前的汇编语言语法,指示汇编器将后续指令解释为 ARM 指令。

    THUMB 指令使用 UAL 语法,指示汇编器将后续指令解释为 Thumb 指令。

    THUMBX 指令使用 UAL 语法,指示汇编器将后续指令解释为 Thumb-2EE 指令。

    CODE16 指令使用 UAL 以前的汇编语言语法,指示汇编器将后续指令解释为 Thumb 指令。

    必要时,这些指令也可插入最多三个填充字节,以对齐到 ARM 的下一个字边界,或插入最多一个填充字节,以对齐到 Thumb 或 Thumb-2EE 的下一个半字边界。

    语法

    ARM
    THUMB
    THUMBX
    CODE16
    CODE32
    

    用法

    在包含使用不同指令集的代码的文件中:

    • ARM 必须位于任何 ARM 代码之前。 CODE32ARM 的同义词。

    • THUMB 必须位于用 UAL 语法编写的 Thumb 代码之前。

    • THUMBX 必须位于用 UAL 语法编写的 Thumb-2EE 代码之前。

    • CODE16 必须位于用 UAL 以前的语法编写的 Thumb 代码之前。

    这些命令不汇编为任何指令, 也不更改状态。 它们仅指示汇编器适当地汇编 ARM、Thumb 或 Thumb-2EE 指令,并在必要时插入填充字节。

    示例

    此示例演示如何使用 ARMTHUMB 从 ARM 指令跳转到 Thumb 指令。

            AREA ToThumb, CODE, READONLY    ; Name this block of code
            ENTRY                           ; Mark first instruction to execute
            ARM                             ; Subsequent instructions are ARM 
    start
            ADR     r0, into_thumb + 1      ; Processor starts in ARM state 
            BX      r0                      ; Inline switch to Thumb state
            THUMB                           ; Subsequent instructions are Thumb
    into_thumb
            MOVS    r0, #10                 ; New-style Thumb instructions
    

       3.常见的指令集有 ARM, Thumb®, Thumb-2, NEON™, VFP,  Wireless MMX instruction sets

          4.判断当前代码ARM哪种指令集可以看27-25bit,由A1,A2,T1,T2,T3等

             

            

  • 相关阅读:
    低功耗蓝牙配对绑定解读和实践
    低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读
    Nordic官方网络资源介绍(官网/devzone/GitHub)
    板子功耗高的原因有哪些
    同样的代码在官方开发板上运行正常,在自己板子上就跑不起来,怎么办
    如何理解nRF5芯片外设PPI
    nRF5芯片外设GPIO和GPIOTE介绍
    定时模块app_timer用法及常见问题—nRF5 SDK模块系列二
    Flash访问模块FDS用法及常见问题—nRF5 SDK模块系列一
    nRF5 SDK软件架构及softdevice工作原理
  • 原文地址:https://www.cnblogs.com/cascle/p/5733559.html
Copyright © 2020-2023  润新知