GCC在C语言中内嵌汇编 asm __volatile__

本文介绍了C语言中GCC内嵌汇编的使用方法,包括简单内嵌汇编和复杂内嵌汇编的示例。内嵌汇编允许开发者直接在C代码中插入汇编指令,同时讲解了`__asm__`和`__volatile__`的作用。`__volatile__`关键字确保编译器不对相关代码进行优化,保持原样执行。文章还探讨了`volatile`在多线程和硬件交互场景中的作用,以及`restrict`关键字在优化方面的意义,提示了编译器可以进行某些优化的假设。
摘要由CSDN通过智能技术生成

在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。

1、简单的内嵌汇编
例:

       __asm__ __volatile__("hlt"); "__asm__"表示后面的代码为内嵌汇编,"asm"是"__asm__"的别名。"__volatile__"表示编译器不要优化代码,后面的指令 保留原样,"volatile"是它的别名。括号里面是汇编指令。

2、内嵌汇编举例
   使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如在下面的汇编语句:
   

__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input));


"movl %1,%0"是指令模板;"%0"和"%1"代表指令的操作数,称为占位符࿰

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值