中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

常见语法错误

立即数对应的约束使用错误

以下例子的输入变量(12345)是一个立即数,应该使用“i”或其他立即数约束,如果使用通用寄存器约束“r”,GCC默认按32位的处理,不能将其赋值到输出变量(output)对应的64位寄存器。

1
2
3
4
5
6
7
8
9
void imm_value_constraint_error()
{
    unsigned long long output = 0;
    __asm__(
        "mov %1, %0\n\t"
        :"=r"(output)
        :"r"(12345)
    );
}

汇编指令使用错误

以下例子的mov指令使用错误。mov指令没有内存操作数到内存操作数的使用场景,输入变量(input)和输出变量(output)不能同时使用内存约束“m”。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void instruction_op_use_error()
{
    unsigned long long input = 0x11223344;
    unsigned long long output = 0;
    __asm__(
        "movq %1, %0\n\t"
        :"=m"(output)
        :"m"(input)
    );
}