内联汇编笔记
重要的一条:其实内联汇编输入部分输出部分相当于函数的参数而已。
__asm__ __volatile__("Instruction List":output:input:Modify);
在output 部分
"=register"(a) : a=register
在input部分
“=register”(a) : register=a
我觉得这是在output部分和input部分的很大的一个区别了。强调这个是因为很容易被混淆。
另外,无论是Output,还是input是没有执行顺序的。我觉得这就完全相当于一条指令,并且没有优先级的指令,不像函数入栈那样有个先后顺序。我为什么这样觉得呢?因为从output开始从0被编号,第一个变量被定为0,就想enum那样。然后在Instruction List中就可以%0,这样引用了。
在output部分,还有一点需要注意,就是“+register”(a)的情况,那么这样子的话,在Instruction List操作之前,先会有一个赋值的操作,就像Input部分那样 register=a.
另外,在gcc汇编c文件的时候,Instruction List 部分会被
APP
....
NO APP
标识.我觉得,这个也很好,并且可以帮助我们看到__asm__ ()里面的执行顺序。虽然我老是说,他们是没有执行顺序的,但是这是两码事。其中的细节,需要细细探究。
还有一些东西,不想再整理了,一起放到google docs了。
http://docs.google.com/Doc?docid=0ASKC30p2j_DDZGY2c25jbm1fODI1aHI0N3ZyZGc&hl=zh_CN
评论
发表评论