全心思齐网

gcc内联原理?


指令部中使用了几个样板操作数,就表明有几个变量需要与寄 存器相结合,这样 GCC 和 GAS 在编译和汇编时会根据后面给定的约束条件进行恰当的 处理。由于样板操作数也使用’%‘作为前缀,因此在涉及到具体的寄存器时,寄存器名前 面应该加上两个’%’,以免产生混淆。

紧跟在指令部后面的是输出部,是规定输出变量如何与样板操作数进行结合的条件,每 个条件称为一个 “约束”,必要时可以包含多个约束,相互之间用逗号分隔开就可以了。

每个输出约束都以’='号开始,然后紧跟一个对操作数类型进行说明的字后,最后是如何 与变量相结合的约束。凡是与输出部中说明的操作数相结合的寄存器或操作数本身,在 执行完嵌入的汇编代码后均不保留执行之前的内容, 这是GCC 在调度寄存器时所使用的 依据。

输出部后面是输入部,输入约束的格式和输出约束相似,但不带’='号。如果一个输入约 束要求使用寄存器, 则GCC 在预处理时就会为之分配一个寄存器, 并插入必要的指令将 操作数装入该寄存器。与输入部中说明的操作数结合的寄存器或操作数本身,在执行完 嵌入的汇编代码后也不保留执行之前的内容。

匿名回答于2021-03-27 00:21:27


相关知识问答