用于在 C 中除以 2 的内联 x86 asm

Inline x86 asm for dividing by 2 in C

我正在尝试转换 C 中的内容

int div
div = div/2;

使用右移 (SAR) 进入内联 ATT x86 程序集

asm("sar %0" : "=r"(div));

但我无法让它工作。 任何见解将不胜感激

通过使用 =r,您告诉编译器 div 中的现有值已被 asm 覆盖。要告诉它您正在 asm 中读取和写入 div 的值,请使用 +r(请参阅 https://gcc.gnu.org/onlinedocs/gcc/Modifiers.html):

asm("sar %0" : "+r"(div));