青云谱网站建设,一个网站如何做cdn加速器,给装修公司做网站,线下编程课程收费标准内联汇编的格式也变得让人生畏了#xff0c;感觉既不像C语言#xff0c;也不像汇编语言#xff0c;似乎是一种中间产物#xff0c;不信您看#xff1a;
asm [volatile] (“assembly code” : output : input : clobber/modify)
和前面的基本内联汇编相比#xff0c;扩展…内联汇编的格式也变得让人生畏了感觉既不像C语言也不像汇编语言似乎是一种中间产物不信您看
asm [volatile] (“assembly code” : output : input : clobber/modify)
和前面的基本内联汇编相比扩展内联汇编在圆括号中变成了4部分多了outputinput和clobber/modify三项。其中的每一部分都可以省略甚至包括assembly code。省略的部分要保留冒号分隔符来占位如果省略的是后面的一个或多个连续的部分分隔符也不用保留比如省略了clobber/modify不需要保留input后面的冒号。
assembly code还是用户写入的汇编指令和基本内联汇编一样。
汇编代码的运行是需要输入参数的其运行之后也可产出结果。
在C代码中内嵌汇编的目的是让汇编帮助C完成某些功能所以C代码就要为其提供参数和用于存放其输出结果的空间。这样一来内联汇编代码类似机器C代码类似人。机器要运行人就要为机器提供加工的源材料input机器运行后将生产出来的成果放到人能够得着的地方(output)人才能获取机器的输出结果。input和output正是C为汇编提供输入参数和存储其输出的部分这是汇编与c交互的关键我们之前的讨论就通过这两项解决。
outputoutput用来指定汇编代码的数据如何输出给C代码使用。内嵌的汇编指令运行结束后如果想将运行结果存储到c变量中就用此项指定输出的位置。output中每个操作数的格式为
”操作数修饰符 约束名”(C变量名)
其中的引号和圆括号不能少操作数修饰符通常为等号’’。多个操作数之间用逗号’,’分隔。
inputinput用来指定C中数据如何输入给汇编使用。要想让汇编使用c中的变量作为参数就要在此指定。input中每个操作数的格式为
”[操作数修饰符] 约束名”(C变量名)
其中的引号和圆括号不能少操作数修饰符为可选项。多个操作数之间用逗号’,’分隔。
单独强调一下以上的output()和input()括号中的是C代码中的变量output(c变量)和input(c变量)就像c语言中的函数将C变量值或变量地址转换成汇编代码的操作数。
clobber/modify汇编代码执行后会破坏一些内存或寄存器资源通过此项通知编译器可能造成寄存器或内存数据的破坏这样gcc就知道哪些寄存器或内存需要提前保护起来后面会展开细说。
assembly code中引用的所有操作数其实是经过gcc转换后的复本“原件”都在output和input括号中的c变量后面通过各种例子您就明白了。