你的位置:首页 > 软件开发 > 操作系统 > Linux内核系列—C语言中内嵌汇编 asm __volatile__

Linux内核系列—C语言中内嵌汇编 asm __volatile__

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

在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。1、简单的内嵌汇编2、内嵌汇编举例__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input));内嵌汇编语法如下:1、汇编语句模板2、输出部分3、输入部分后 例功能是将(*addr)的第nr位设为1。第一个占位符%0与C 语言变量ADDR对应,第二个占位符%1与C语言变量nr对应。因此上面的汇编语句代码与下面的伪代码等价:btsl nr, ADDR,该指令的两个操作数不能全是内存变量,因此将nr的限定字符串指定为"Ir",将nr 与立即数或者寄存器相关联,这样两个操作数中只有ADDR为内存变量。4、限制字符      分类            限定符                    描述       内存            "m"             内存变量     寄存器或内存   "g"             将输入变量放入eax,ebx,ecx,edx中的一个     立即数     匹配             " 0 ",         表示用它限制的操作数与某个指定的操作数匹配,    操作数类型      "="          操作数在指令中是只写的(输出操作数)       浮点数           "f"          浮点寄存器5、破坏描述部分"memory"比较特殊,可能是内嵌汇编中最难懂部分。为解释清楚它,先介绍一下编译器的优化知识,再看C关键字volatile。最后去看该描述符。


原标题:Linux内核系列—C语言中内嵌汇编 asm __volatile__

关键词:linux

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录