ARM汇编

数据和指令类型

ARM 采用的是 32 位架构 .
ARM 约定 :
        Byte : 8 bits
        Halfword : 16 bits (2 byte)
        Word : 32 bits (4 byte)
        Doubleword 64-bits( 8byte )( Cortex-A 处理器)
大部分 ARM core 提供:
        ARM 指令集( 32-bit
        Thumb 指令集( 16-bit

 

ARM指令集

所有 ARM 指令均为 32-bits
大部分为单周期指令
所有指令都可以条件执行

 分类

ARM 指令集可以分为六大类
        1.数据处理指令 ( 完成 CPU 内部的计算)
        2. Load/Store指令 ( 完成 CPU 与内存 IO 外设之间的数据传输)
        3. 跳转指令 ( 完成程序的跳转)
        4. 程序状态寄存器处理指令 ( 完成 CPSR 的管理 )
        5. 协处理器指令 ( 完成 CPU 扩展功能的实现 )
        6. 异常产生指令 ( 用户程序异常触发 )
ARM指令集(ARM920T 核心)

 数据处理指令

算术指令:
         ADD         ADC         SUB         SBC         RSB         RSC
位 运 算 指令:
        AND         ORR         EOR         BIC
比较指令:
        CMP         CMN         TST         TEQ
数据搬移:
        MOV         MVN

 数据处理指令详细列表如下:

条件码

下表为所有可能的条件码:

 

ARM寄存器

 

ARM

ARM 37 32-Bits 长的寄存器。
        1 个用作 PC( program counter)
        1个用作 CPSR(current program status register)
        5个用作 SPSR(saved program status registers)
        30 个通用寄存器

Cortex体系

Cortex 体系结构下有 40 32-Bits 长的寄存器。
Cortex-A多出3个寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon
当前处理器的模式决定着哪组寄存器可操作 . 任何模式都可以存取:
        相应的r0-r12 子集
        相应的 r13 (the stack pointer, sp) and r14 (the link register, lr)
        相应的 r15 ( the program counter, pc)
        相应的CPSR(current program status register, cpsr)
特权模式 ( system 模式 ) 还可以存取;
        相应的 spsr (saved program status register)

 

ARM源文件

源程序文件文件名说 明
汇编程序文件*.S *.s
ARM 汇编语言编写的 ARM 程序或 Thumb 程序。( 汇编代码可直接操作 CPU 内部的 REG)
C程序文件*.C *.cC语言编写的程序代码
头文件*.H *.h
为了简化源程序,把程序中常用到的常量名、宏定义、数据结构定义等等单 独放在一个文中,一般称为头文件。

ARM汇编语言

伪操作

伪指令

伪指令语法格式作 用
ADR
ADR{cond} register
expr
将基于 PC 或基于寄存器的地址值读取到
寄存器中。小范围的地址读取。
ADRL
ADRL{cond} register
expr
将基于 PC 或基于寄存器的地址值读取到
寄存器中。中等范围的地址读取。
LDR
LDR {cond} register
= expr | label-expr
将一个 32 位的立即数或者一个地址值读
取到寄存器中。大范围的地址读取。
NOPNOP在汇编时将被替换成ARM中的空操作。

源程序的基本结构

举例说明
area RESET,code,readonly ;声明了一个名为 RESET 的代码段
code32                     ;代表了后面的指令是ARM指令
entry                      ;代表该段是程序的入口点

start                  ;标号
    mov r0, #1         ;r0 = 1
    mov r1, #2         ;r1 = 2
    add r0,r0,r1       ;r0 = r0 +r1
    nop                ; 伪指令
b start                ;跳转回start
    end                ;源文件结束

立即数

一个数(或其按位取反后)循环右移偶数位后所有的1能放进低8位中

e.g.

  mov r0, #1

#1即为一个立即数

堆栈

ARM堆栈操作通过块传送指令来完成 :
STMFD
        (Push) 块存储 - Full Descending stack [STMDB]
LDMFD
        (Pop) 块装载- Full Descending stack [LDMIA]
STMFD sp!, {r4-r7,lr}     ; 保护现场

LDMFD sp!, {r4-r7,pc}     ;恢复现场

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值