汇编程序前要加PRESERVE8

require8和preserve8c和汇编有8位对齐的要求,这两个伪指令能够满意此要求

LDR和MOV

LDR Rn, label1

LDR指令负责将label1所代表的存储器中数据搬移到内部寄存器Rn中。指令使用方式有:

LDR R0,[R1] ;

R1中代表存储器地址,在存储器中将R1地址处的数据加载到寄存器R0中。

LDR R0,=0x00000040 ;

将立即数装入R0中,如果立即数小,该指令等效 MOV R0,#64,如果立即数很大比如占据32bit,那么该指令将变成伪指令,见下条。

LDR R0,=0xF0000000 ;

立即数很大,无法将立即数和指令合并成32bit,指令会被编译器拆分为LDR R0, [PC, #offset]; .word 0xF00000000两条指令,即先将立即数利用.word指令存储在该LDR指令附近,编译器计算立即数与当前正在执行指令PC(program counter)指针的偏差offset,注意ARM是流水线指令,采用取指令,译指令和执行指令。

LDR R0,label;

将label标号所代表的寄存器地址中数据装在到R0。

STR

STR{条件}  源寄存器,<存储器地址>
STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常
用,丏寻址方式灵活多样,使用方式可参考指令LDR。

指令示例:
STR R0,[R1],#8             ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8]             ;将R0中的字数据写入以R1+8为地址的存储器中。”

MSR

MRS R0,CPSR     ;        读取CPSR
BIC R0,R0,#0x1F ;        修改,去除当前处理器模式
ORR R0,R0,#0x13 ;        修改,设置特权模式
MSR CPSR_c, R0  ;        写回,仅仅修改CPSR中的控制位域

ldmia与stmdb

ldmia r0!, {r4-r11, r14}  的意思是

LDMIA 中的 I 是 increase 的缩写,A 是 after 的缩写,LD加载(load)的意思
R0后面的感叹号“!表示会自动调节 R0里面的指针
所以整句话意思是任务栈R0的存储地址由低到高,将R0存储地址里面的内容手动加载到 CPU 寄存器 R0,R4-R12里

还有一种是STMDB R1!, {R0,R4-R12} 这就和上面反过来了,ST是存储(store)的意思,D是decrease的意思,B是before的意思,整句话就是R1的存储地址由高到低递减,将R0,R4-R12里的内容存储到R1任务栈里面。

stmdb:db(decrease before)表示先减后存。

指令 stmdb sp!, { fp, ip, lr, pc}  %% "!”表示sp等于最终被修改的sp的值。

假设 sp=4096,此条指令的执行过程如下:

1.先减:sp=sp-4=4092;

2.后存:4092-4095处存放pc的值;

3.先减:sp=sp-4=4088;

4.后存:4088-4091处存放lr寄存器的值;

以此类推,..........。

ldmia:ia(increase after)表示先读后增。

指令ldmia sp, {fp,sp, pc}

假设 sp=4080,此条指令的执行过程如下:

1.先读:fp位于4080-4083处存放原来保存的fp;

2.后增:sp=sp+4=4084;

3.先读:sp位于4084-4087处存放原来保存的ip;

4.后增:sp=sp+4;

cps

cpsie i        开启IQR中断,cpsid是关闭
cpsie f        开启FQR中断(快速中断),cpsid是关闭
dsb             
isb

指令名

功能描述

DMB

数据存储器隔离。DMB 指令保证: 仅当所有在它前面的存储器访问操作

都执行完毕后,才提交(commit)在它后面的存储器访问操作。

DSB

数据同步隔离。比 DMB 严格: 仅当所有在它前面的存储器访问操作

都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访 问操作——译者注)

ISB

指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执

行完毕之后,才执行它后面的指令。

svc

/* 调用 SVC 去启动第一个任务 */
svc 0

nop

空操作

ORR

ORR指令的格式为: ORR{条件}{S}  目的寄存器,操作数1,操作数2

ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。

操作数1应是一 个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。

操作数2为32位的掩码,如果在掩码中置了某一位1,则将这一位置1。未设置的掩码位保持不变。

B BL BX BLX

(1) B 跳转指令

(2) BL 带返回的跳转指令

(3) BLX 带返回和状态切换的跳转指令

(4) BX 带状态切换的跳转指令

X 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。因此可以将处理器的工作状态有ARM 状态切换到Thumb 状态

FreeRTOS中汇编指令相关推荐

  1. [ctf逆向002]:修改二进制文件中汇编指令的三种方法(OD、IDA、C32asm)

    文章目录 一.IDA中修改汇编指令 二.OD中修改汇编指令 三.C32asm中修改汇编指令 为对二进制文件进行破解,常常面临修改汇编指令,重新保存二进制文件的工作,以<加密与解密>第四版3 ...

  2. 通过查看Windbg中汇编指令及内存中的值去定位软件崩溃问题

    目录 1.在Windbg中分析dump文件的一般步骤 1.1.查看异常的类型

  3. Boost:嵌入PTX汇编指令 直接将其添加到boost.compute函数中

    Boost:嵌入PTX汇编指令 直接将其添加到boost.compute函数中 实现功能 C++实现代码 实现功能 Boost的compute模块,嵌入PTX汇编指令 直接将其添加到boost.com ...

  4. 【汇编语言】理解8086CPU中,不同类型的寄存器和汇编指令规则的联系(会继续更新)

    0 前言 你是否因为汇编指令繁杂的规则而苦恼呢?作者本人也很烦,因为往往教材中只告诉我们规则,却不告诉我们为什么,没有原因就直接记忆,负担太大,后期灵活运用也增添阻力,因此,我经过自己的思考去为你解释 ...

  5. ARM中的---汇编指令

    ARM中的---汇编指令 一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是 ...

  6. 逆向中常见寄存器及常用汇编指令

    寄存器 通用寄存器 (前八个) 32位 16位 作用 EAX(累加器) AX 作用于操作数和结果的数据 EBX(基址寄存器) BX DS段中的数据指针 ECX(计数器) CX 用于字符串和循环操作 E ...

  7. 【Android 逆向】x86 汇编 ( 参考资料 | Intel 官方的文档 | x86 汇编中文文档 | 汇编指令查询器 )

    文章目录 一.x86 汇编参考文档 1.Intel 官方的文档 2.常用 x86 汇编文档 3.x86 汇编指令查询器 总结 一.x86 汇编参考文档 下面的所有资料 , 都可以在博客资源 https ...

  8. 在IAR中使用汇编指令\内嵌汇编

    先看内嵌汇编示例,两种写法(IAR8.3实测可正常编译运行.功能是跳转执行程序,设置栈顶指针) //示例一: if (((*(__IO uint32_t *)ApplicationAddress) & ...

  9. windows debug下验证汇编指令中的mov指令传送数据

    一.知识储备 1.8086CPU是16位结构,有16根数据线,20根地址线.16根数据线可以一次性传送16位数据,也就是两个字节(也就是一个字)的数据. 什么是字? 在这个特定计算机中,字是其用来一次 ...

最新文章

  1. 华为鸿蒙系统新机发布时间,华为鸿蒙OS发布会定档,或将有多款新机亮相
  2. 【C 语言】内存四区原理 ( 常量区示例 | 不同函数返回的相同字符串的指针地址相同 )
  3. 创建型模式(五):Singleton(单例模式)
  4. IntelliJ IDEA 使用 LiveEdit 插件实现实时可视化前端开发
  5. 闭包、装饰器与递归_月隐学python第12课
  6. 如何安装Genymotion虚拟机以及Genmotion的eclipse插件
  7. golang 项目设置后台运行
  8. apache httpd配置后启动失败或域名绑定无效等问题解决方法
  9. 2021普通高考重庆成绩查询平台,2021年重庆高考成绩查询时间及查分方式
  10. Linux中的samba服务和ftp服务
  11. react实战之cnode—01环境配置
  12. 学会2种方法,小白也能快速产出标准的Axure原型
  13. 停车场系统管理数据库设计说明书
  14. Windows漏洞补丁更新网址
  15. K3默认序时簿是不体现即时库存的,如果需要在序时簿将物料的即时库存数据带入,可以按照下方的步骤实现:
  16. 拓扑结构计算机网络结构,什么是计算机网络的拓扑结构
  17. 麒麟服务器系统编译raid驱动
  18. 安全好用的智能头盔,自带灯光提示与语音功能,力沃BH51M Neo体验
  19. 达梦数据库更换key文件的方法
  20. 无人驾驶技术入门(五)| 没有视觉传感器,还谈什么无人驾驶?

热门文章

  1. Kconfig语法详解
  2. 4.1.2 计算机网络之(电路交换、报文交换、分组交换--数据报--虚电路)
  3. 从物联网架构分析物联网安全风险
  4. s2023gc53次大公约数
  5. use of undeclared identifier ‘connect‘
  6. 利用树莓派制作天气闹钟
  7. Java课程设计——挖地雷游戏设计报告
  8. MAC版Proxyee Down百度网盘高速下载器教程
  9. Python网络编程——面向连接(TCP)和无连接(UDP)时间戳网络小程序
  10. 入手评测 神舟战神Z8值得买吗