七、ARM 指令集

发布时间:2023-07-11  

7.1 数据处理指令

7.1.1 数据传送类

  • MOV 类指令:核内寄存器间的数据传送

  • 加载和存储指令(L/S):核内寄存器与挂在存储器总线上器件的数据传送

  • 注意:

    • 核内寄存器就是 R0-R15

    • 外设寄存器入 GPIO 的寄存器

7.1.2 算术逻辑运算类

  • ADD:假发指令

    • MOV R0,#0x01

    • ADD R0,R0.#0x01

  • SUB:减法指令

  • MUL:乘法指令

  • AND:按位与指令

  • ORR:按位或指令

  • EOR:按位异或指令

  • BIC:清零指令

    • BIC R1,R1,#0x0f

    • 最低 4 位清零

  • 注意:ARM 指令集中没有除法指令,通过软件(移位-比较-相减)实现,不过在 ARMV7 指令集中增加了除法指令

7.1.3 比较指令

  • CMP:比较两个数,会影响标志位

  • TST:测试某一位是否为0,常与 EQ, NE 等条件码结合使用

  • TEQ:判断两个数的位值是否相等,与 EQ, NE 条件码结合使用

  • 注意:它们不需要加后缀 S,它们会直接影响程序状态寄存器,常用于选择/循环结构

7.2 跳转指令

  • B:直接跳到要执行的指令处

  • BL:待返回的跳转指令,相当于 C 语言的函数调用

  • BX:改变状态的跳转,把 RN 的值赋值给 R15(PC),然后改变 CPSR 的 T位, T 位由 RN 里面的最低为即 bit 0 决定

    • Rn[0] = 1, THUMB 状态(在原有的 Rn 上加 1 即可)

    • Rn[0] = 0,ARM 状态

    • BX R0             跳到 R0 地址处

    • 1110 0001 0010 1111 1111 1111 0001 0000

  • BLX:带返回的改变状态的跳转

7.3 协处理指令

  • 协处理器是协助主 CPU 完成一些特定功能(MMU、Cache 和 TLB 等等)的处理器

  • 功能上和操作系统的虚拟地址映射、Cache 管理等有关。

  • 主要的指令有三类

    • 数据操作指令:ARM 处理器通过 CDP 命令通知协处理器完成一些初始化操作,命令的解析由协处理器完成

    • 存储器数据传送指令:ARM 处理器通过 LDC/STC 指令将内存单元的数据读取或者写入到协处理器的寄存器中

    • 寄存器数据传送指令:ARM 处理器通过 MCR/MRC 指令将 ARM 处理器中的寄存器数据与协处理器中的寄存器数据进行数据传送

  • 协处理器有 16 个,一般 CP15 是设置 MMU, Cache, 大小端等关于存储器配置的。

  • CP15 包含 16 个 32 位寄存器, C0 - C15

  • MCR{cond}   coproc, opcode1, Rd, CRn, CRm, opcode2

  • MRC{cond}   coproc, opcode1, Rd, CRn, CRm, opcode2

    • coproc:指令操作的协处理器名,标准名为 pn, n 为 0 ~ 15

    • opcode1:协处理器的特定操作码,对于 CP15 寄存器来说, opcode 永远为0,不为 0 时,操作不可预知

    • Rd:CPU 的寄存器

    • CRn:存放第一个操作数的协处理器寄存器

    • CRm:存放第二个操作数的协处理器,用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为 C0

    • opcode2:可选的协处理器操作码,用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为 0

7.4 杂项指令

7.4.1 软中断

  • SWI:软中断,一般用于系统调用,有两种方式完成:

    • MOV R0, #0x12         

    • MOV R1, #0x01

    • SWI 0x00                    产生中断,模式变成 SVC,跳到中断向量位置去

    • MOV R0, #0x01          设置子功能为 0x01

    • SWI 0x12                    调用 0x12 软中断

    • 方式一:

    • 方式二:

7.4.2 寄存器与 PSR 数据传送

  • 指令:MRS 和 MSR

  • PSR 的控制域(fsxc):

    • 位【31:24】位条件标志位域,用 f 表示;

    • 位【23:16】为状态位域,用 s 表示;

    • 位【15:8】为扩展位域,用 x 表示;

    • 位【7:0】位控制位域,用 c 表示

  • mrc r0, cpsr              将 cpsr 的值存入到 r0 中

  • msr cpsr_c, #0xd3   将立即数 0xd3 放入到 cpsr 的 C 控制域中

7.5 伪指令

  • 伪指令不是 ARM 指令,但可以把它当作指令来使用,主要作用是方便编写程序,最终还是会转换成 ARM 指令

  • LDR R0,=0x12345678                 ;绝对地址

  • ADR R0,xxx(地址标号)                ;相对地址

  • ADRL R0, xxx(地址标号)        ;相对地址

  • NOP                                               ;MOV R0, R0

  • 区分:

    • adr   r0, _start                     ;取运行地址                 

    • ldr    r1, _start                   ;取得运行地址中的值(指令)

    • ldr r2, = start                    ;取的是链接地址


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>