Apa arti dari 'R' dalam nama register x64?

27

Saya tahu register 32 bit dinamai seperti register 16 bit dengan awalan 'E' berarti diperpanjang. Saya selalu berasumsi bahwa itu berarti diperpanjang dari 16 ke 32 bit meskipun saya belum pernah melihat yang secara eksplisit dinyatakan.

Saya mencoba mencari tahu apa arti 'R' tetapi kemampuan google saya mengecewakan saya. Adakah yang tahu

Mat
sumber

Jawaban:

32

Itu berarti mendaftar , dan itu tidak semua karena alasan historis.

Bagian sejarahnya adalah bahwa Intel terbiasa menghitung register dengan huruf dengan 8008 (A sampai E plus H dan L). Skema itu lebih dari cukup pada saat itu karena mikroprosesor memiliki sangat sedikit register dan tidak mungkin mendapatkan lebih banyak, dan sebagian besar desain melakukannya. Sentimen yang berlaku kemudian adalah bahwa perangkat lunak akan ditulis ulang untuk CPU baru saat mereka muncul, sehingga mengubah skema penamaan register antara model tidak akan menjadi masalah besar. Tidak ada yang meramalkan 8088 yang berkembang menjadi "keluarga" setelah dimasukkan ke dalam PC IBM, dan kuk kompatibilitas ke belakang cukup banyak memaksa Intel untuk harus mengadopsi skema seperti "E" pada register 32-bit untuk mempertahankannya.

Bagian non-historis semuanya praktis. Menggunakan huruf untuk register tujuan umum membatasi Anda hingga 26, lebih sedikit jika Anda menyingkirkan yang mungkin menyebabkan kebingungan dengan nama register tujuan khusus seperti penghitung program, bendera atau penunjuk tumpukan.

Saya tidak punya sumber untuk mengkonfirmasinya, tapi saya menduga pilihan Rsebagai awalan dan pengenalan R8 hingga R15 pada 64-bit CPU memberi sinyal transisi ke register bernomor, yang telah menjadi norma di antara 32-bit-dan - Arsitektur yang lebih besar tidak berasal dari 8008 selama hampir setengah abad. IBM melakukannya pada 1960-an dengan 360 dan telah diikuti oleh PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intel i860 dan i960 dan banyak lainnya yang sudah lama terlupakan.

Anda akan mencatat bahwa register yang ada akan cocok dengan R0 sampai R7 jika ada, dan itu tidak akan mengejutkan saya sedikit jika mereka diperlakukan seperti itu secara internal. Register panjang yang ada (RAX / EAX / AX / AL, RBX / EBX / BX / BL, dll.) Mungkin akan tetap ada sampai matahari terbakar.

Blrfl
sumber
1
Agak antiklimaks, tapi kurasa aku seharusnya tidak terlalu terkejut. Terima kasih.
Matt
3
Itu semua drama yang bisa saya kumpulkan. :-)
Blrfl
+1 untuk bacaan yang sangat menarik. Tetapi jika itu akan diringkas hanya dalam satu baris, itu akan menjadi jawaban yang saya berikan. Semua informasi yang kaya dan menarik ini dilipat menjadi "alasan historis" jika dirangkum.
Mike Nakis
6
AMD memang mempertimbangkan untuk mengganti nama atau alias register 8 rendah ke r0- r7, atau menggunakan UAXbukannya r8, dll . "Mencari tahu cara terbaik untuk mendaftar register sebenarnya adalah salah satu bagian tersulit dari melakukan ekstensi register." (Lihat stackoverflow.com/a/35619528/224132 untuk beberapa sejarah x86-64 yang rapi.) Juga, urutannya bukan RAX / RBX / ... dalam pengkodean biner, itu AX, CX, DX, BX
Peter Cordes
9

Dalam prosesor sebelumnya, tidak semua register sama:

  • Tidak ada cukup ruang pada chip untuk memiliki unit penambah untuk setiap register.
  • Dengan 8 bit, tidak ada cukup opcodes yang tersedia untuk semua kemungkinan kombinasi sumber dan tujuan.

Jadi dengan asumsi bahwa satu register spesifik selalu terlibat ketika adder terlibat, membuat chip lebih kompleks dan opcode lebih pendek.

Misalnya 6510 (digunakan dalam Commodore 64) hanya bisa menambahkan menggunakan register A, dan pengindeksan menggunakan X atau Y. Ada instruksi INC X dan INC Y, tetapi tidak ada INC A.

Karena register memiliki penggunaan yang berbeda, mnemonik dipilih yang mencerminkan penggunaannya. Misalnya A, X, dan Y di 6510 (bukan A, B, dan C).

Nama-nama dalam 8086 dipilih untuk mencerminkan penggunaannya juga. Dengan 4 register tujuan umum, logis untuk menamakannya AX, BX, CX, dan DX. Register pengindeksan tambahan disebut BP dan SP (mnemonic: Base Pointer, Stack Pointer).

Karena banyak opcode diperpanjang hingga 16 bit, ada beberapa ruang untuk menunjukkan yang mana dari empat register yang digunakan. Namun, beberapa alasan historis masih berlaku, karena CX sedikit istimewa: REP dan sejenisnya, yang merupakan opcodes 8 bit, selalu menggunakan CX sebagai penghitungnya. Mnemonic sederhana, CX = Counter, membantu untuk mengingat mana yang digunakan.

Opcode untuk penerus ke 8086 harus kompatibel ke belakang, dan berantakan karena opcode panjang variabel. Ketika bus 32 bit menjadi lebih umum, prosesor dengan panjang opcode tetap dicoba. Ini menyederhanakan bagian decoding dari CPU, yang membebaskan ruang yang dapat digunakan untuk misalnya register lebih banyak.

Prosesor yang mengikuti alur pemikiran ini disebut prosesor RISC (Reduced Instruction Set CPU), berbeda dengan CISC (Complex Instruction Set CPU).

Lebih banyak register menghasilkan lebih sedikit tumpahan ke memori. Pada dasarnya, register adalah cache tercepat yang tersedia, jadi menambah jumlah register adalah ide yang bagus, bahkan saat ini. Kurangnya instruksi khusus (mudah-mudahan lebih dari) dikompensasi oleh instruksi sederhana yang lebih cepat.

Memperbaiki panjang opcode 32 bit memiliki ruang yang cukup untuk memasukkan sumber, sumber kedua, operasi, dan tujuan. SPARC berhasil memeras 5 bit untuk masing-masing sumber, sumber kedua, dan tujuan, dan karenanya 32 register terlihat pada saat yang sama.

32 register terlalu banyak untuk menggunakan huruf, dan mereka sebagian besar tetap sama, jadi memberi nomor adalah pilihan yang jelas. 'R' digunakan untuk membedakan mereka dari konstanta 0..31, dan 'R' adalah mnemonik yang mudah untuk Register. Karena itu: R0..R31.

Selama bertahun-tahun, Pentium dan para penggantinya telah mempertahankan kepatuhan yang mundur. Namun, banyak dari ide RISC yang lebih berhasil juga digabungkan. Seringkali, instruksi baru seperti RISC akan berjalan lebih cepat daripada versi yang kompatibel ke belakang.

Jumlah register juga ditingkatkan oleh Intel, untuk mengurangi jumlah akses memori.

Dan ternyata, Intel akhirnya sudah mulai menggunakan notasi-R. Kompatibilitas mundur akan memastikan bahwa AXE, BX, ... akan tetap ada, tetapi saya berani bertaruh bahwa AXE hanya sinonim untuk misalnya R0.


Penafian : Di atas adalah pandangan saya tentang sejarah. Ini akan menjadi tidak lengkap karena saya tidak ada untuk menyaksikan bagian awal sejarah secara langsung. Meskipun demikian, saya harap ini bermanfaat bagi sebagian orang.

Sjoerd
sumber
1
Keluarga 6500 benar-benar tidak perlu untuk instruksi khusus untuk menambah akumulator karena penambahan mode-langsung dari 1 mengambil dua siklus yang sama sebagai INXatau INY, meskipun kode menempati byte tambahan. Saya menulis banyak perakitan untuk chip itu dan dalam praktiknya kenaikan semacam itu jarang dilakukan di luar matematika yang membutuhkannya.
Blrfl
@ Blrfl Anda benar: ADD 1berfungsi sehingga tidak perlu untuk 'Meningkatkan A' khusus. Dan saya tidak ingat membutuhkannya juga.
Sjoerd
1
Perlu dicatat bahwa bukan Intel yang menambah jumlah register di x64 dan menamakannya, tetapi AMD, karena ekstensi 64-bit ke x86 dibuat oleh AMD . Desain 64-bit Intel adalah Itanium , yang belum bekerja dengan sangat baik, meskipun mereka memasukkan banyak (128 integer tujuan umum, ditambah banyak lainnya) dari register di dalamnya.
8bittree
5

Itu hanya berarti 'daftar'. Untuk alasan historis.

Mike Nakis
sumber
Ini tidak terlalu historis jika saat ini mengacu pada register, bukan? Saya akan mengatakan bahwa nama lain untuk register (AXE, EAX, dll.) Lebih karena alasan historis. Tetapi "R" dalam RAX sebenarnya sangat berlaku saat ini.
Carl G
1
(+1) meme: "Jika Anda bisa menjelaskannya lama, Anda bisa menjelaskannya singkat."
user7813604