常见语法错误
立即数对应的约束使用错误
以下例子的输入变量(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) ); } |
父主题: 嵌入式汇编例外场景和常见语法错误