Этот код напечатан "Hello World!"и выйти без библиотеки C.ссылка (самосовершенствование программиста - ссылка, загрузка и библиотека)
Я не понимаю, почему в print () перед "rax" стоит "%%",но "%" перед "rax" в exit () .Я попытался добавить еще один "%" перед "rax" в exit (), и я получаю сообщение об ошибке:
TinyHelloWorld.c:14: Error: bad register name `%%rbx'
TinyHelloWorld.c:15: Error: bad register name `%%rax'
WRITE имеет системный вызов номер 4 и EXIT равен 1, яПонятия не имею, в чем разница по поводу использования "rax"?
char *str="Hello world!\n";
void print()
{
asm("movq $13,%%rdx \n\t"
"movq %0,%%rcx \n\t"
"movq $0,%%rbx \n\t"
"movq $4,%%rax \n\t"
"int $0x80 \n\t"
::"r"(str):"edx","ecx","ebx");
}
void exit()
{
asm("movq $42,%rbx \n\t"
"movq $1,%rax \n\t"
"int $0x80 \n\t");
}
void nomain()
{
print();
exit();
}