---
title: 常见语法错误
description: "以下例子的输入变量（12345）是一个立即数，应该使用“i”或其他立即数约束，如果使用通用寄存器约束“r”，GCC默认按32位的处理，不能将其赋值到输出变量（output）对应的64位寄存器。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/sourcecodeporting/DevKit_Porting_0028.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/sourcecodeporting/DevKit_Porting_0028.html
indexId: 9a7827090005aae4ef0613e7161087ed49816bfc6cb672f64d5e04c097d156e381
---
# 常见语法错误

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

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

```
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”。

```
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)
    );
}
```
