Я пытаюсь подобрать немного 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 по-разному.