Perbezaan: 1. Peruntukan daftar yang berbeza, x64 mempunyai 16 daftar, x86 hanya mempunyai 8 daftar 2. Arahan pemasangan yang berbeza; tidak mempunyai penuding bingkai tindanan, manakala x86 menggunakan ebp sebagai penunjuk bingkai tindanan 6. Kelajuan pengkomputeran x64 lebih tinggi daripada x86.
Persekitaran pengendalian tutorial ini: sistem linux5.9.8, komputer Dell G3.
0x01: Perbezaan dalam peruntukan daftar
(1) Terdapat 16 daftar dalam 64-bit dan hanya 8 dalam 32-bit. Tetapi 8 bit pertama 32-bit mempunyai nama yang berbeza, iaitu e_, manakala lapan pertama daripada 64-bit menggunakan r dan bukannya e, iaitu r_. Penamaan daftar bermula dengan e masih boleh digunakan secara langsung pada 32 bit bawah daftar yang sepadan, manakala nama daftar yang selebihnya adalah dari r8 - r15, dan bit bawah ditetapkan oleh d, w, dan b masing-masing
(; 2) 32 bit Gunakan bingkai tindanan sebagai lokasi penyimpanan parameter yang diluluskan, dan gunakan daftar 64-bit, menggunakan rdi, rsi, rdx, rcx, r8, r9 sebagai parameter 1-6 masing-masing, dan rax sebagai nilai pulangan ;
(3) 64-bit tidak mempunyai penuding bingkai tindanan, 32-bit menggunakan ebp sebagai penunjuk bingkai tindanan, 64-bit membatalkan tetapan ini dan rbp digunakan sebagai daftar umum; ) 64-bit menyokong beberapa bentuk pengalamatan berkaitan PC, 32-bit hanya menggunakan kaedah pengalamatan ini apabila menggunakan jmp;
mov, push dan pop lanjutkan siri movq mov dan pushq dan popq untuk mengendalikan perkataan quad. Tambahan: (1) movabsq bukan sambungan 32-bit, ia adalah arahan baharu semata-mata. Digunakan untuk menyimpan nilai literal 64-bit terus ke dalam daftar 64-bit. Kerana movq hanya boleh menyimpan nilai 32-bit, arahan baharu
(2) Kod pemasangan 64-bit boleh menambah wakil sebelum ret, di sini rep tidak mempunyai makna praktikal, hanya kerana pemproses AMD, untuk mengelakkan tempat di mana jmp sampai adalah terus ret, yang akan menjadikan pemproses berjalan lebih cepat
0x03: Perbezaan dalam panggilan fungsi
(1) x_64 parameter dihantar melalui daftar (lihat di atas); yang tidak boleh meletakkan semua pembolehubah tempatan dalam daftar akan memperuntukkan ruang pada tindanan; (3) Fungsi boleh memperoleh sehingga 128 bait ruang tindanan. Dengan cara ini, fungsi boleh menyimpan maklumat pada tindanan tanpa mengubah penuding tindanan (iaitu, ruang 128-bait di bawah rsp boleh digunakan terlebih dahulu. Ruang ini dipanggil zon merah. Dalam x86-64, ia tersedia pada setiap masa ); (4) Tiada lagi penunjuk bingkai tindanan, dan kedudukan tindanan kini berkaitan dengan penuding tindanan. Kebanyakan fungsi memperuntukkan semua ruang tindanan yang diperlukan pada permulaan panggilan, dan kemudian memastikan penuding tindanan tidak berubah (5) Sesetengah daftar direka bentuk untuk menjadi daftar storan penerima, dan ini mesti ditukar apabila nilainya diperlukan; untuk ditukar Simpan sekarang dan pulihkan kemudian.
0x04: Perbezaan dalam pemindahan parameter
(1) 6 daftar digunakan untuk memindahkan parameter (lihat
(2) Daftar selebihnya diluluskan seperti sebelumnya (tetapi ia berkaitan dengan rsp, ebp tidak lagi digunakan sebagai penuding bingkai tindanan, dan parameter ke-7 bermula dari rsp, parameter ke-8 bermula dari rsp 8, dan seterusnya) ;
(3) Apabila dipanggil, rsp bergerak ke bawah 8 bit (disimpan dalam alamat pemulangan tidak mempunyai kesan Parameter ke-7 dan seterusnya adalah yang ke-7 bermula dari rsp 8, rsp 16 Mula). dengan yang ke-8, dan seterusnya; 0x05: Perbezaan dalam bingkai tindanan
Bingkai tindanan tidak lagi diperlukan dalam banyak kes, seperti kerana Tiada fungsi lain dipanggil, dan daftar sudah cukup untuk menyimpan parameter, maka hanya alamat pemulangan yang perlu disimpan.
Situasi di mana bingkai tindanan diperlukan: (1) Terdapat terlalu banyak pembolehubah tempatan dan daftar tidak mencukupi (2) Beberapa pembolehubah tempatan ialah tatasusunan atau struktur; ) Fungsi menggunakan Ambil operator alamat untuk mengira alamat pembolehubah setempat (4) Fungsi mesti menggunakan tindanan untuk memindahkan beberapa parameter ke fungsi lain (5) Fungsi perlu menyimpan keadaan; daripada beberapa daftar yang disimpan oleh penerima ( untuk memudahkan pemulihan); daripada tindanan kekal tidak berubah, supaya ia boleh Ia digabungkan dengan ofset untuk beroperasi pada nilai yang sepadan, jadi EBP tidak lagi diperlukan sebagai penuding bingkai tindanan. Walaupun banyak kali kita berfikir bahawa tidak ada "bingkai tindanan", setiap panggilan fungsi mesti mempunyai alamat pemulangan yang ditolak ke tindanan Kita juga boleh menganggap alamat ini sebagai "bingkai tindanan" kerana ia juga menyimpan keadaan pemanggil. 0x06: Kelajuan operasi yang berbeza Cadangan berkaitan: "Tutorial Video Linux"
Lebar data CPU 64-bit ialah 64 bit, dan set arahan 64-bit boleh menjalankan 64-bit arahan data, iaitu Pemproses boleh mengekstrak data 64-bit pada satu masa, iaitu dua kali lebih tinggi daripada 32-bit Secara teori, prestasi akan digandakan dengan sewajarnya.
Atas ialah kandungan terperinci Apakah perbezaan antara x64 dan x86 dalam linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!