当前位置: 首页 > article >正文

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}     ;恢复现场


http://www.kler.cn/a/297053.html

相关文章:

  • 记录:uniapp直播的弹幕的样式修改与发送弹幕会自动滚动到底部两个技巧
  • HTML 超链接
  • 量化投资策略与技术学习PART9:量化选股之筹码选股
  • 验证码识别之点选验证码识别——绪论
  • 资深研发的心愿:PostgreSQL未来若能加入这些功能,将更臻完善
  • 周报 | 24.9.2-24.9.8文章汇总
  • flutter之常用数据类型
  • 佰朔资本:沪指跌0.23%,金融板块集体上扬,半导体等板块下挫
  • vue使用Export2Excel导出表格
  • 倒推因子分解法——C语言实现
  • 象过河在线进销存软件——简单、高效、智能,让生意更简单!
  • Qt-高DPI显示器
  • 大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动基于事件驱动
  • “声”临其境:iKF Ultra 降噪耳机,音乐与静谧的完美融合
  • 基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练
  • 鸿蒙轻内核A核源码分析系列四(3) 虚拟内存
  • 视频监控管理平台LntonAIServer视频智能分析噪声检测应用场景
  • 【JUC】13-原子类
  • 如何在算家云搭建MindSearch(智能搜索)
  • [N1CTF 2018]eating_cms1