Что означает этот знак доллара в __asm? - PullRequest
4 голосов
/ 20 марта 2011

Я попытался найти это, и не смог найти ничего достаточно информативного для моего понимания.

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) знак $ не нужен?

Ответы [ 3 ]

2 голосов
/ 20 марта 2011

$1 постоянна

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

$ имеет префикс перед константами и имеет непосредственное значение. msg1 и msg1 являются адресами двух массивов. Таким образом, они слишком префикс с $.

i - это переменная c. К которому обращаются, используя memory access (Косвенная ссылка).

Проверьте это ссылка .

1 голос
/ 20 марта 2011

Constants должен начинаться с префикса "$".

movl $msg1, %eax\n\

Знак доллара означал константу, и то же самое верно для $msg1.Константа здесь является адресом msg1.

0 голосов
/ 02 апреля 2011

$ здесь совпадает с & в C / C ++, что означает адрес-из

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...