c - 这个美元符号在 __asm 中是什么意思?

标签 c assembly

我试着用谷歌搜索这个,但找不到任何足以让我理解的信息。

int i;
char msg1[] = "odd";
char msg2[] = "even";
char *ptr;
__asm__("                   \
    movl i, %eax\n\
        andl $1, %eax\n\
        jz  zero\n\
        movl $msg1, %eax\n\
        jmp done\n\
zero:\n\
        movl $msg2, %eax\n\
done:\n\
        movl %eax, ptr\n\
  ");

为什么有些需要 $ 而其他(比如 i)没有 $ 符号?

最佳答案

$1 是常数一

 `andl $1, %eax` this means do  AND of 1 and EAX register.

$ 是常量前面的前缀并且立即赋值。 msg1 和 msg1 是两个数组的地址。所以它们的前缀太多了 $

i 是一个 c 变量。使用内存访问(间接引用)访问它。

检查这个reference .

关于c - 这个美元符号在 __asm 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5366996/

相关文章:

c - 使用互斥锁按顺序同步线程

c - C 中的不稳定递归

assembly - 优化比较指令数(PDP-11)

c - 汇编到 C 协助

计算用 XOR 方法编写的谢尔宾斯基三角形的维数

c - 运算符 '!' 的未经允许的操作数 [MISRA 2012 规则 10.1,必需]

c - %79[^\n] 和 %79[^\n]\n 的区别

assembly - 对于 asm 语句中的临时寄存器,我应该使用 clobber 还是虚拟输出?

将函数复制到可执行页面并调用

windows - 为什么 Windows64 使用与 x86-64 上的所有其他操作系统不同的调用约定?