Неге% eax printf-қа қоңырау шалу алдында нөлге теңестірілген?

Мен x86-ны аздап алуға тырысып жатырмын. Мен 64 биттік Mac-та gcc -S -O0-мен жинақтап жатырмын.

C кодындағы код:

printf("%d", 1);

Шығарылым:

movl    $1, %esi
leaq    LC0(%rip), %rdi
movl    $0, %eax        ; WHY?
call    _printf

% eax неге 'printf' деп аталмас бұрын 0-ге дейін тазаланатынын түсінбеймін. printf басылған таңбалардың санын % eax деп қайтаратындықтан, менің ойымша, оны дайындау үшін нөлге теңестірілген printf , бірақ мен деп ойладым. printf оны дайындауға жауапты болуы керек еді. Сонымен қатар, керісінше, егер мен өз функциямды int testproc (int p1) деп атайтын болсам, gcc дайындаудың қажеті жоқ % eax . Сондықтан неге gcc printf және testproc басқаша қарайды.

32
задан phoxis 2 June 2011 в 09:38
поделиться