网站开发需求2017年最新网站设计风格
文章目录
- ARM dsb sy 指令
 
上篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令
 下篇文章:ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
ARM dsb sy 指令
数据同步屏障是一种特殊类型的内存屏障。
 只有当DSB指令执行完毕后,才会执行程序中位于此指令后的指令。 当满足以下条件时,此指令才会完成:
- 位于此指令前的所有显式内存访问均完成;
 - 位于此指令前的所有缓存、跳转预测和 TLB 维护操作全部完成。
 
ARM 的 DSB 指令可以接受以下参数来控制其行为:
SY: 全系统DSB。这个屏障对所有的处理器都起作用,也就是说,这个指令会影响所有处理器上的内存访问。ST: 存储DSB。等待所有存储操作及相关的缓存和缓冲区维护操作完成。ISH: 内共享域DSB。等待在处理器的内共享域(Inner Shareable domain)里的所有内存访问以及相关的缓存和缓冲区维护操作完成。ISHST: 内共享域存储DSB。等待在处理器的内共享域里的所有存储操作以及相关的缓存和缓冲区维护操作完成。NSH: 非共享域DSB。等待在处理器的非共享域(Non-shareable domain)里的所有内存访问以及相关的缓存和缓冲区维护操作完成。NSHST: 非共享域存储DSB。等待在处理器的非共享域里的所有存储操作以及相关的缓存和缓冲区维护操作完成。
一个常见的使用DSB指令的例子是在写入特殊的硬件寄存器之前和之后。在这种情况下,需要确保所有之前的内存操作都已完成,并且在写入操作完成之后,再执行后续的指令。以下是一个例子:
MOV r0, #0x5A       ; 将 0x5A 写入 r0 寄存器 
STR r0, [r1]        ; 将 r0 寄存器的值存储到 r1 指向的内存地址 
DSB SY              ; 执行 DSB 指令,等待上述的存储操作完成 
MOV r0, #0xA5       ; 将 0xA5 写入 r0 寄存器 
STR r0, [r1, #4]    ; 将 r0 寄存器的值存储到 r1 指向的内存地址偏移 4 个字节的位置
 
在上述例子中,DSB SY指令确保了第一个存储操作(STR r0, [r1])在第二个存储操作(STR r0, [r1, #4])之前已经完成。这是因为在某些情况下,如访问特殊硬件寄存器时,执行顺序是很重要的。
关于 ISB/DSB/DMB 的具体介绍见:ARM Cache 系列文章 5 – 内存屏障ISB/DSB/DMB
上篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令
 下篇文章:ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
