Rumah > pembangunan bahagian belakang > C++ > Mengapa Kod Perhimpunan Ini Termasuk `push rax` Permulaan Sebelum Panggilan Fungsi?

Mengapa Kod Perhimpunan Ini Termasuk `push rax` Permulaan Sebelum Panggilan Fungsi?

DDD
Lepaskan: 2024-12-15 18:55:10
asal
189 orang telah melayarinya

Why Does This Assembly Code Include an Initial `push rax` Before a Function Call?

Mengapakah RAX Push awal dalam Function Call Assembly ini?

Dalam output pemasangan coretan kod C yang disediakan, fungsi f mempamerkan tolakan awal daftar RAX ke tindanan.

Rasional

ABI x64 memberi mandat bahawa penjajaran tindanan adalah 16 bait sebelum arahan panggilan. Memandangkan panggilan menolak alamat pemulangan 8-bait ke dalam tindanan, mengganggu penjajaran, pengkompil memasukkan operasi tolak untuk mengekalkan penjajaran.

Pilihan khusus untuk menolak nilai dummy ini dioptimumkan untuk pemproses yang dilengkapi dengan enjin tindanan. , yang boleh melaksanakan arahan tolak dengan lebih cekap berbanding sub rsp, 8.

Sebaliknya, fungsi g, yang melakukan panggilan fungsi mudah tanpa pembungkus fungsi std::, tidak memerlukan pelarasan penjajaran tindanan dan dengan itu tidak melaksanakan tolakan awal ini.

Atas ialah kandungan terperinci Mengapa Kod Perhimpunan Ini Termasuk `push rax` Permulaan Sebelum Panggilan Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan