__asm__ __volatile__

__asm__是GCC 关键字asm 的宏定义
用来声明一个内联汇编表达式

__volatile__是GCC 关键字volatile 的宏定义
#define volatile volatile
向GCC 声明不允许对该内联汇编优化,否则当 使用了优化选项(-O)进行编译时,GCC 将会根据自己的判断决定是否将这个内联汇编表达式中的指令优化掉。

带有C/C++表达式的内联汇编格式为:

asm volatile(“Instruction List” : Output : Input : Clobber/Modify);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

当在"Instruction List"中有多条指令的时候,
可以在一对引号中列出全部指令,
也可以将一条 或几条指令放在一对引号中,所有指令放在多对引号中。必须用分号(;)或换行符(/n)将它们分开.

在ARM系统结构上关闭中断的操作

三条指令,/n分开。
只有2个输出寄存器,无输入

改变内存

int disable_interrupts (void) 
{ 
unsigned long old,temp; 
__asm__ __volatile__("mrs %0, cpsr/n" 
"orr %1, %0, #0x80/n" 
"msr cpsr_c, %1" 
: "=r" (old), "=r" (temp) 
: 
: "memory"); 
return (old & 0x80) == 0; 
}

在这里插入图片描述在这里插入图片描述
ref
指令查询
https://blog.csdn.net/qq_35608277/article/details/105123483
CPSR查询
https://blog.csdn.net/qq_35608277/article/details/105107353

ref
其他
https://blog.csdn.net/geekcome/article/details/6216436

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值