IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM汇编详解 -> 正文阅读

[嵌入式]ARM汇编详解

ARM汇编基本指令:

????????https://blog.csdn.net/weixin_38927522/article/details/119682157

Android与ARM处理器:

????????ARM处理器架构概述

????????ARM处理器家族

????????Android支持的处理器架构

????????ARM/x86/MIPS

原生程序与ARM汇编语言:?

????????原生程序逆向初步

????????代码混淆技术

????????ARM指令集

堆栈指针寄存器sp/堆栈寻址指令(stmfd压栈/ldmfd出栈)

存储器访问指令(str写入数据到存储器中/ldr从存储器中读取数 据到寄存器)

数据处理指令(mov)/带链接跳转指令(bl)

原生程序的生成过程(交叉编译/跨平台编译)

预处理(预处理指令) 编译 汇编 链接

必须了解的ARM知识

????????汇编:芯片,高级语言的逆向,中间语言

????????分析和修改汇编指令:赋值、跳转、算术运算、移位运算、堆栈操 作、内存读写指令、函数调用约定

????????Thumb(16位)、Thumb2(32位)、ARM(32位)

用户模式(usr):

????????不分组寄存器(R0-R7)

????????分组寄存器(R8-R14)

????????传递参数与返回值(R0-R3)

????????保存栈顶地址(R13/SP)

????????保存函数的返回地址(R14/LR)

????????程序计数器R15(PC)

????????状态寄存器CPSR

ARM处理器:

????????ARM状态(执行32位对齐指令的ARM指令)

????????Thumb状态(执行16位对齐的Thumb指令)


ARM汇编语言程序结构:

????????完整的ARM汇编程序

????????处理器架构定义

????????段定义

????????注释与标号

????????@=>单行注释

????????/**/=>多行注释

汇编器指令

????????子程序与参数传递

????????R0-R3这4个寄存器用来传递函数调用的第1到第4个参数,超 出的参数通过堆栈来传递

????????R0寄存器同时用来存放函数调用的返回值

????????被调用的函数在返回前无需恢复这些寄存器的内容

ARM指令集:

????????立即寻址(mov r0,#0x123)?

????????寄存器寻址(mov r0,r1)

????????寄存器移位寻址(mov r0,r1,lsl #0x2)

????????LSL(逻辑左移)

????????LSR(逻辑右移)

????????ASR(算术右移)

????????ROR(循环右移)

????????RRX(带扩展的循环右移)

????????寄存器间接寻址(ldr r0,[r1])

????????基址寻址(ldr r0,[r1,#-4])

????????多寄存器寻址(ldmia r0,{r1,r2,r3,r4})

堆栈寻址(stmfd sp!,{r1-r7,lr}(入栈保护)/ldmfd sp,{r1-r7,lr}(出栈恢复))

????????ldmfa/stmfa

????????ldmea/stmea

????????ldmfd/stmfd

????????ldmed/stmed

块拷贝寻址

????????ldmia/stmia

????????ldmda/stmda

????????ldmib/stmib

????????ldmdb/stmdb

相对寻址

????????相对寻址以程序计算器pc的当前值作为基地址,指令中的地址 标号作为偏移量,将两者相加之后得到操作数有效地址ARM与 Thum指令集

指令格式

????????<opcode>:指令助记符

?????????{<cond>}:执行条件

????????{s}:是否影响cpsr寄存器的值

????????{.w}:指令宽度说明符.w表示是32位

????????{.n}:指令宽度说明符.n表示16位

????????<rd>:目的寄存器

????????,<rn>:第一个操作数寄存器

????????{,<perand2>}:第二个操作数:立即数、寄存器、寄存器移位

????????eq:相等/z=1

????????ne:不相等/标志z=0

????????hi:无符号数大于/c=1,z=0 ??

????????cs/hs:无符号数大于或等于/c=1

????????cc/lo:无符号数小于/c=0 ?

????????ls:无符号数小于或等于/c=0,z=1

????????gt:有符号数大于/z=0,n=v ??

????????ge:有符号数大于或等于/n=v

????????lt:有符号数小于/n!=v ??

????????le:有符号数小于或等于/z=1,n!=v

????????mi:负数/n=1 ?????????????

????????pl:整数或0/n=0

????????vs:溢出/v=1 ??????????

????????vc:没有溢出

跳转指令

????????B 无条件跳转

????????BL 带链接的无条件跳转

????????BX 带状态切换的无条件跳转

????????BLX 带链接和状态切换的无条件跳转

寄存器访问指令

????????ldr(<-)/ldrd

????????str(->)/strd

????????ldm(->)

????????stm(<-)

????????push(入栈)/pop(出栈)

????????swp

数据处理指令

????????数据传送指令(mov)/数据非传送指令(mvn)

算术运算指令

????????add/adc

????????sub/rsb/sbc/rsc

????????mul/mls/mla ??umull/umlal smull/smlal smlad/smlsd

????????sdiv/udiv

????????asr(算术右移指令)

逻辑运算指令

????????and/orr/eor ??逻辑与/逻辑或/逻辑异或

????????bic(位清楚指令)

????????lsl/lsr ??逻辑左移/逻辑右移

????????ror/rrx ??循环右移/带扩展的循环右移

比较指令

????????cmp/cmn/tst/teq

其他指令

????????nop(空操作指令)

????????swi(软中断指令)

????????mrs(读状态寄存器指令)

????????msr(写状态寄存器指令)

ARM指令机器码:

B/BL指令

00001BD0 ? BEQ loc_1c04

31-28:cond=>0000???

27-25:101

25-24:L=>B:0 /BL:1

23-0:offset:目标地址与该指令的相对偏移

offset:(1c04-(1bd0+8))/4=1011

0000 101 0 000000000000000000001011

0A 00 00 0B

00001BD0 0B 00 00 0A

LDR/STR指令

00001BC0 LDR R2,[R12]

00001BC0 00 20 9C E5

E5 9C 20 00

1110 01 011001 1100 0010 000000000000

cond ???1110

指令标识 ??01

IPUBWL ??011001

Rn:R12 ???1100

Rd:R2 ?????0010

offset:0 ???000000000000

MOV指令

MOV R1, #0x56000000

56 14 A0 E3

E3 A0 14 56

1110 00 1 1101 0 0000 0001 0100 01010110

Thumb指令

CPSR寄存器

T位:1-thumb,0-arm

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:19:00  更:2021-09-06 11:20:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:22:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码