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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM64基础8:A64其他常用指令 -> 正文阅读

[嵌入式]ARM64基础8:A64其他常用指令

1.加载指令(PC相对地址)

ADR: 加载PC相对地址的label地址,范围+/- 1MB;
ADRP: 加载PC相对地址,label地址,并且4KB对齐,范围+/- 4GB;

/* others inst */

.align 3
.global my_test_data
my_test_data:
	.dword 0x12345678abcdeeff

.global adrp_test
adrp_test:
	adr x0, my_test_data

	adrp x1, my_test_data   //4KB align
	add x2, x1,#:lo12:my_test_data
	ldr x3, [x2] //get val

	ldr x4,=my_test_data  //get addr
	ldr x5, my_test_data  //get value

	adrp x6, init_pg_dir  //get addr
	ldr x7, =init_pg_dir  //get addr

	ret

运行结果如下图:
在这里插入图片描述

LDR和ADRP区别

LDR伪指令:加载的是链接地址(虚拟地址)
ADRP指令:加载的是当前运行地址的PC值+label的offset,即label的当前运行地址(物理地址)

在link脚本,将链接地址改成0xffff000000080000,重新执行上面程序;
注:当程序链接地址不等于运行地址时,用如下命令加载符号表,否则无法单步调试;

add-symbol-file xxx.elf 0x80030 -s .text.boot 0x80000 -s .rodata 0x80758

0x80030:text段的起始地址;
0x80000:text.boot段的起始地址;
0x80758:只读数据段的起始地址;

可通过aarch64-linux-gnu-readelf -S xxx.elf来查看各个段的地址
在这里插入图片描述
程序启动:看到PC值:
在这里插入图片描述
重新运行测试程序,结果如下:在这里插入图片描述

2. 内存独占加载和访问指令

ldxr xd, [xn|sp] //独占的读取xn或sp地址的内容到xd寄存器
stxr wd, xt, [xn|sp] //独占的把xt内容写入到xn或sp指向的地址
//wd为0, 表示成功;wd = 1,表示不成功

Linux内核常用来实现atomic访问;
spinlock机制可以简单易用ldxr和lstxr指令实现;

.align 3
.global my_data2
my_data2:
	.dword 0x0

.global my_atomic_write
my_atomic_write:
	adr x6, my_data2;

1:
	ldxr x2, [x6];
	orr x2,x2,x0;
	stxr w3, x2, [x6]

	cbnz w3, 1b

	mov x0,x2

	ret

在这里插入图片描述

3.异常处理指令

svc:系统调用指令
hvc:虚拟化系统调用指令
smc:安全监控系统调用指令

4. 系统寄存器访问指令

指令描述
MRS读取系统寄存器到通用寄存器
MSR写系统寄存器

5.内存屏障指令

指令名功能描述
DMB数据存储器隔离。DMB 指令保证:指令前后的,内存访问指令的执行循序 ; 不保证: 内存访问指令在内存屏障指令之前完成;
DSB数据同步隔离。比 DMB 严格: 任何指令都要等DSB前面的存储访问完成
ISB指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:01:45  更:2021-08-27 12:03:08 
 
开发: 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年12日历 -2024/12/28 17:49:34-

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