![]() |
1
9
似乎有用。我相信寄存器约束的语法在某一点上发生了变化,但是它并没有被很好地记录下来。我发现编写原始程序集和避免麻烦更容易。 |
![]() |
2
5
约束条件是 单一的 字母(可能带有额外的修饰),您可以指定几个替代项(即,中间操作数或寄存器是“ir”)。因此约束“e a x”表示约束“e”(有符号32位整数常量)、“a”(寄存器e a x)或“x”(任何SSE寄存器)。这和OP的意思有点不同…和 输出 “e”显然没有任何意义。此外,如果某个操作数(在本例中是输入和输出)必须与另一个操作数相同,则可以通过数字约束引用它。没有必要说EAX会被击倒,它是一个输出。您可以通过%0、%1、…,引用内联代码中的参数,不需要使用显式的寄存器名。因此,OP所预期的代码的正确版本是:
一个更好的解决方案是允许%2是任何内容,而%0是一个寄存器(正如x86允许的那样,但您必须检查您的机器手册):
|
![]() |
3
0
如果你想使用多行,那么这也可以。
应添加'\'以便编译器接受多行字符串(指令)。 |