EN
注册

常见语法错误

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

以下例子的输入变量(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)
    );
}
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词