Я пытаюсь подобрать немного x86. Я компилирую на 64-битном mac с gcc -S -O0.
Код в C:
printf("%d", 1);
Вывод:
movl $1, %esi
leaq LC0(%rip), %rdi
movl $0, %eax ; WHY?
call _printf
Я не понимаю, почему% eax очищается до 0 до вызова printf. Поскольку printf
возвращает количество символов, напечатанных на %eax
, моя лучшая догадка обнуляется, чтобы подготовить его для printf
, но я предположил бы, что printf
должен будет нести ответственность за его готовность. Кроме того, напротив, если я вызываю свою собственную функцию int testproc(int p1)
, gcc
не видит необходимости готовить %eax
. Поэтому мне интересно, почему gcc
обрабатывает printf
и testproc
по-разному.