关注this manual我想创建最简单的内联AVR程序集片段:将两个变量的值复制到另外两个变量。
uint8_t a, b, c, d;
a = 42;
b = 11;
asm(
"mov %0, %2\n\t"
"mov %1, %3\n\t"
: "=r" (c), "=r" (d)
: "r" (a), "r" (b)
);
我希望它等同于:
uint8_t a, b, c, d;
a = 42;
b = 11;
c = a;
d = b;
但是,运行后c
和d
的值均等于 42 。如果我将asm snipptet更改为:
asm(
"mov %0, %3\n\t"
"mov %1, %2\n\t"
: "=r" (c), "=r" (d)
: "r" (a), "r" (b)
);
c
等于 11 ,d
等于 42 。同样,将两个源操作数更改为%2
会产生两个 42 ,并将它们设置为%3
会产生两个 11 。
为什么第一个版本不能按预期工作?