C/assembly中的双冒号“::“运算符

wz3gfoph  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(205)

首先,不,我不是在谈论C++作用域解析操作符。
我使用以下语法:

asm(
"mov R0,%0\n"
"mov R1,%1\n"
"mov R3,%2\n"
"mov R4,%3\n"
"mov R5,%4\n"
::"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
"r"(<A_VALUE>),
:"r0","r1","r2"
)

冒号和双冒号是什么意思?我确实记得在动态创建变量名时必须要做一些与字符串连接有关的事情。
提前万分感谢!

gxwragnw

gxwragnw1#

::不是一个操作符,它是两个:分隔符。更多细节请参见GCC手册-扩展ASM。

asm asm-qualifiers ( AssemblerTemplate 
                 : OutputOperands 
                 [ : InputOperands
                 [ : Clobbers ] ])

asm asm-qualifiers ( AssemblerTemplate 
                      : OutputOperands
                      : InputOperands
                      : Clobbers
                      : GotoLabels)

在本例中,OutputOperands参数为空:

asm(
    
    // Assembler Template
    "mov R0,%0\n"
    "mov R1,%1\n"
    "mov R3,%2\n"
    "mov R4,%3\n"
    "mov R5,%4\n"
    
    :
    
    // OutputOperands
    // (none)
    
    :
    
    // Input Operands
    "r"(<A_VALUE>),
    "r"(<A_VALUE>),
    "r"(<A_VALUE>),
    "r"(<A_VALUE>),
    "r"(<A_VALUE>),
    
    :
    
    // Clobbers
    "r0","r1","r2"
    
)

相关问题