Bab 11 Buat Di Print
December 18, 2018 | Author: Loli Olivia Ersan | Category: N/A
Short Description
Download Bab 11 Buat Di Print...
Description
Chapter 11 - Instruction sets : Addressing Modes and Formats 11.1 Addressing Immediate Addressing Direct Addressing Indirect Addressing Register Addressing Register Indirect Addressing Displacement Addressing Stack Addressing 11.2 x86 and ARM Addressing Modes X86 Addressing Modes ARM Addressing Modes 11.3 Instruction Formats Instruction length Allocation of Bits Variabel-Length Instruction 11.4 x86 and ARM Instruction formats X86 Instruction Formats ARM Instruction formats 11.5 Assembly Language 11.6 Recommended Reading 11.7 Key Term, Review Questions, and Problems
POIN KUNCI y
y
Referensi operan dalam instruksi baik berisi nilai sebenarnya dari operan (langsung) atau referensi ke alamat dari operan. operan. Berbagai macam mode pengalamatan yang digunakan dalam berbagai set instruksi. Ini termasuk secara langsung (alamat operan operan dalam bidang alamat), tidak langsung (alamat lapangan menunjuk ke sebuah lokasi yang berisi alamat operand), register, register tidak langsung, dan berbagai bentuk perpindahan, di mana nilai register akan ditambahkan ke nilai alamat untuk yang menghasilkan alamat operan. Format instruksi mendefinisikan bidang tata letak dalam instruksi. Desain format instruksi adalah melakukan yang kompleks, termasuk pertimbangan seperti panjang instruksi, atau variabel panjang tetap, jumlah bit digunakan untuk opcode dan setiap referensi operan dan bagaimana mode pengalamatan ditentukan.
Dalam Bab 10, berfokus berfokus pada set instruksi. instruksi. Secara khusus, diperiksa jenis operan operan dan operasi yang mungkin ditetapkan oleh instruksi mesin. Bab ini beralih beralih ke pertanyaan tentang bagaimana untuk menentukan operan dan operasi instruksi. Dua masalah masalah timbul. Pertama, bagaimana bagaimana alamat dari dari sebuah operan yang ditentukan, dan kedua, bagaimana bit instruksi terorganisir untuk mendefinisikan alamat operan dan pengoperasian dari instruksi itu? 11.1 Addressing
Bidang alamat atau bidang dalam dalam format instruksi khas relatif kecil. Kami ingin dapat referensi berbagai macam lokasi di memori utama, untuk beberapa sistem, virtual memory. Ini merupakan tujuan, berbagai teknik menangani telah digunakan. Ini melibatkan melibatkan beberapa trade-off antara range alamat atau fleksibilitas pengalamatan, salah satu pihak, dan jumlah referensi memori dalam instruksi dan kompleksitas perhitungan alamat. Dalam bagian ini, kita memeriksa pengalamatan teknik yang paling umum: -Immediate -Direct -Indirect -Register -Register indirect -Displacement -Stack Modus ini diilustrasikan pada Gambar 11.1. Pada bagian ini, kita menggunakan notasi berikut: A = berisi dari instruksi alamat field R = berisi dari alamat field dalam instruksi yang mengacu untuk register EA = aktual (efektif) alamat lokasi berisi referensi operan
POIN KUNCI y
y
Referensi operan dalam instruksi baik berisi nilai sebenarnya dari operan (langsung) atau referensi ke alamat dari operan. operan. Berbagai macam mode pengalamatan yang digunakan dalam berbagai set instruksi. Ini termasuk secara langsung (alamat operan operan dalam bidang alamat), tidak langsung (alamat lapangan menunjuk ke sebuah lokasi yang berisi alamat operand), register, register tidak langsung, dan berbagai bentuk perpindahan, di mana nilai register akan ditambahkan ke nilai alamat untuk yang menghasilkan alamat operan. Format instruksi mendefinisikan bidang tata letak dalam instruksi. Desain format instruksi adalah melakukan yang kompleks, termasuk pertimbangan seperti panjang instruksi, atau variabel panjang tetap, jumlah bit digunakan untuk opcode dan setiap referensi operan dan bagaimana mode pengalamatan ditentukan.
Dalam Bab 10, berfokus berfokus pada set instruksi. instruksi. Secara khusus, diperiksa jenis operan operan dan operasi yang mungkin ditetapkan oleh instruksi mesin. Bab ini beralih beralih ke pertanyaan tentang bagaimana untuk menentukan operan dan operasi instruksi. Dua masalah masalah timbul. Pertama, bagaimana bagaimana alamat dari dari sebuah operan yang ditentukan, dan kedua, bagaimana bit instruksi terorganisir untuk mendefinisikan alamat operan dan pengoperasian dari instruksi itu? 11.1 Addressing
Bidang alamat atau bidang dalam dalam format instruksi khas relatif kecil. Kami ingin dapat referensi berbagai macam lokasi di memori utama, untuk beberapa sistem, virtual memory. Ini merupakan tujuan, berbagai teknik menangani telah digunakan. Ini melibatkan melibatkan beberapa trade-off antara range alamat atau fleksibilitas pengalamatan, salah satu pihak, dan jumlah referensi memori dalam instruksi dan kompleksitas perhitungan alamat. Dalam bagian ini, kita memeriksa pengalamatan teknik yang paling umum: -Immediate -Direct -Indirect -Register -Register indirect -Displacement -Stack Modus ini diilustrasikan pada Gambar 11.1. Pada bagian ini, kita menggunakan notasi berikut: A = berisi dari instruksi alamat field R = berisi dari alamat field dalam instruksi yang mengacu untuk register EA = aktual (efektif) alamat lokasi berisi referensi operan
(X) = isi dari lokasi memori memori X atau register X. Tabel 11.1 menunjukkan perhitungan alamat untuk setiap mode pengalamatan. Sebelum memulai diskusi ini, dua komentar dibuat. dibuat. Pertama, hampir semua arsitektur komputer menyediakan lebih dari dari salah satu mode pengalamatan. pengalamata n. Pertanyaan muncul sebagai bagaimana dua dua prosesor dapat menentukan alamat, mana modus yang yang digunakan dalam instruksi tertentu. Beberapa pendekatan yang diambil. Seringkali, opkode berbeda akan menggunakan mode pengalamatan yang berbeda. Juga, satu atau lebih lebih bit dalam format instruksi dapat dapat digunakan sebagai bidang mode. Nilai bidang mode menentukan mode pengalamatan yang akan digunakan. Kekhawatiran Kekhawatira n komentar kedua penafsiran alamat efektif efektif (EA). Dalam sebuah sistem tanpa memori virtual, keefektifan alamat akan baik alamat memori utama atau register. Dalam sistem memori virtual, alamat efektif adalah sebuah alamat virtual atau register. Pemetaan sebenarnya ke alamat fisik merupakan fungsi dari unit manajemen memori (MMU) dan tidak terlihat ke pemrogram. Immediate
Addressing
Bentuk paling sederhana dari pengalamatan ini segera ditangani, di mana nilai operan hadir dalam instruksi Operand = A Mode ini dapat digunakan untuk mendefinisikan dan menggunakan set awal atau nilai konstan dari variabel. Biasanya, nomor akan disimpan dalam bentuk melengkapi berpasangan; berpasa ngan; bit paling kiri dari bidang operan digunakan sebagai bit tanda. Ketika operan dimuat ke register data, bit tanda diperluas diperluas ke kiri untuk ukuran word word data penuh. Dalam beberapa beberapa kasus, nilai nilai biner langsung ditafsirkan ditafsirkan sebagai sebagai unsigned integer non-negatif. Keuntungan langsung menangani adalah bahwa tidak ada referensi memori lain selain instruksi fetch diperlukan untuk memperoleh operan, sehingga akan menghemat satu memori atau siklus cache dalam siklus siklus instruksi. Kerugiannya Kerugiannya adalah bahwa bahwa ukuran dari jumlah ini terbatas terbatas pada ukuran field field alamat, yang pada set instruksi yang paling, sangat kecil dibandingkan dengan panjang kata. Direct Addressing
Sebuah bentuk yang sangat sederhana adalah langsung ditangani, di mana field alamat mengandung alamat efektif dari operan: EA = A Teknik ini umum di generasi komputer sebelumnya tetapi tidak umum pada arsitektur kontemporer. Hal ini hanya membutuh membutuhkan kan satu referensi memori memori dan perhitungan khusus. Pembatasan yang jelas bahwa hal itu hanya menyediakan ruang alamat yang terbatas. Indirect Addressing
Dengan alamat langsung, panjang field alamat biasanya kurang dari panjang kata, sehingga membatasi jangkauan alamat. Salah satu solusinya adalah dengan memiliki field alamat alamat yang mengacu
pada alamat dari sebuah kata dalam memori, yang pada panjang gilirannya berisi alamat lengkap dari operan. Hal ini dikenal sebagai pengalamatan tidak langsung. EA = (A) Seperti yang didefinisikan sebelumnya, tanda kurung harus ditafsirkan sebagai makna isi. Keuntungan yang jelas dari pendekatan ini adalah bahwa untuk panjang kata N, tersedia ruang alamat 2 N sekarang. Kerugiannya adalah bahwa pelaksanaan instruksi memerlukan dua referensi memori untuk mengambil operan: satu untuk mendapatkan alamat dan satu detik untuk mendapatkan nilai. Meskipun jumlah kata yang dapat diatasi sekarang sebesar 2 N, jumlah alamat efektif yang berbeda mungkin direferensikan pada satu waktu dibatasi untuk 2 k, di mana K adalah panjang dari bidang alamat. Biasanya, ini bukan pembatasan berat, dan dapat menjadi aset. Dalam lingkungan memori virtual, semua lokasi alamat efektif dapat dibatasi ke halaman 0 proses apapun. Karena field alamat dari instruksi ini masih kecil, secara alami akan menghasilkan rendah-nomor alamat langsung, yang akan muncul di 0 halaman. (Pembatasan-satunya adalah bahwa ukuran halaman harus lebih besar dari atau sama dengan 2 k) ketika suatu proses aktif, akan ada diulang referensi ke halaman 0, menyebabkan ia tetap berada di memori nyata. Dengan demikian, referensi memori tidak langsung akan melibatkan, paling tidak, satu kesalahan halaman daripada dua. Sebuah varian jarang digunakan secara tidak langsung menangani adalah bertingkat atau cascade tidak langsung berbicara: EA = (... (A) ...) Dalam hal ini, satu bit dari kata alamat lengkap adalah sebuah bendera tidak langsung (I). jika saya bit adalah O,, maka kata berisi EA. Jika bit I adalah 1, maka tingkat lain tipuan dipanggil. Tidak tampak akan ada keuntungan tertentu untuk pendekatan ini, dan itu merugikan karena bahwa tiga atau lebih referensi memori dapat diminta untuk mengambil operan. R egister Addressing
Register addressing mirip dengan direct addressing. Satu-satunya perbedaan adalah bahwa field alamat mengacu pada sebuah register bukan alamat memori utama. EA = R Untuk memperjelas, jika isi dari field alamat mendaftar di instruksi adalah 5, kemudian mendaftarkan R5 adalah alamat yang dituju, dan nilai operan terkandung dalam R5. Biasanya, field alamat yang referensi register akan memiliki 3 sampai 5 bit, sehingga jumlah 8-32-register tujuan umum bisa dirujuk. Keuntungan dari register pengalamatan yang (I) hanya field alamat kecil dibutuhkan dalam instruksi, dan (2) tidak mengkonsumsi memori referensi-waktu diperlukan. Seperti yang telah dibahas dalam Bab 4, akses memori waktu untuk sebuah register internal untuk prosesor ini jauh lebih sedikit itu daripada untuk alamat memori utama. Kerugian dari register menangani adalah bahwa ruang alamat sangat terbatas. Jika mendaftar menangani banyak digunakan dalam sebuah set instruksi, ini menunjukkan bahwa register prosesor akan banyak digunakan. Karena jumlah sangat terbatas dari register (dibandingkan dengan lokasi memori utama), penggunaannya dalam cara ini masuk akal hanya jika mereka bekerja efisien. Jika
setiap operan dibawa ke sebuah register dari memori utama, dioperasikan pada sekali, dan kemudian kembali ke memori utama, maka langkah antara boros telah ditambahkan. Jika, sebaliknya, operan di register tetap digunakan untuk operasi ganda, maka tabungan nyata dicapai. Contohnya adalah hasil tengah dalam penghitungan. Secara khusus, anggaplah bahwa algoritma untuk kelompok dua-dua melengkapi perkalian itu harus diimplementasikan dalam perangkat lunak. Lokasi berlabel A dalam flowchart (Gambar 9.12) adalah dirujuk berkali-kali dan harus diimplementasikan dalam register dan bukan lokasi memori utama. Terserah programmer atau compiler untuk menentukan nilai-nilai harus tetap dalam register dan yang harus disimpan dalam memori utama. prosesor modern kebanyakan mempekerjakan tujuan umum beberapa register, menempatkan beban untuk eksekusi efisien di-bahasa programmer assembly (misalnya, penulis compiler). R egister I ndirect Addressing
Sama seperti pengalamatan register analog untuk langsung menangani, register indirect addressing analog dengan pengalamatan tidak langsung. Dalam kedua kasus, satu-satunya perbedaan adalah apakah field alamat mengacu ke lokasi memori atau register. Jadi untuk mendaftarkan alamat langsung EA = (R) Keunggulan dan keterbatasan pengalamatan register tidak langsung pada dasarnya sama sebagai untuk tidak langsung menangani. Dalam kedua kasus, ruang alamat pembatasan (jangkauan terbatas alamat) dari field alamat diatasi dengan memiliki lapangan yang merujuk pada kata panjang yang berisi lokasi alamat. Selain itu, mendaftar menggunakan pengalamatan tidak langsung satu kurang memori referensi daripada langsung menangani. Displace ment Addressing
Sebuah modus yang sangat kuat menangani menggabungkan kemampuan pengalamatan langsung dan pengalamatan register tidak langsung. Hal ini dikenal dengan berbagai nama tergantung pada konteks penggunaannya, tetapi mekanisme dasar adalah sama. Kita akan lihat ini sebagai perpindahan pengalamatan: EA = A + (R) Pemindahan menangani mensyaratkan bahwa instruksi memiliki dua field alamat, di antaranya adalah eksplisit. Nilai yang terkandung dalam satu bidang alamat (nilai = A)
digunakan secara langsung. Alamat bidang lain, atau referensi implisit berdasarkan opkode, mengacu pada sebuah register yang isinya ditambahkan ke A untuk menghasilkan efektif Alamat: Kami akan menjelaskan tiga dari umum menggunakan sebagian besar perpindahan alamat: . Pengalamatan relatif . Base-register pengalamatan . Pengindeksan Relative Addressing Untuk relatif pengalamatan, juga disebut pengalamatan PC-relatif register yang direferensikan secara implisit adalah program counter (PC). Artinya, berikutnya alamat instruksi ditambahkan ke kolom alamat untuk menghasilkan EA. Biasanya, field alamat diperlakukan sebagai pelengkap dua nomor operasi ini. Jadi alamat efektif adalah perpindahan relatif terhadap alamat instruksi. Relatif menangani eksploitasi konsep lokalitas yang dibahas dalam Bab 4 dan 8. Jika referensi memori paling relatif dekat dengan instruksi dieksekusi, maka penggunaan pengalamatan relatif menyimpan alamat bit dalam instruksi. BASE-REGISTER ADDRESSING Untuk dasar-register pengalamatan, penafsiran adalah berikut: Register direferensikan berisi alamat memori utama, dan iklanlapangan gaun berisi perpindahan (biasanya merupakan representasi unsigned integer) dari alamat tersebut. Referensi mendaftar bisa eksplisit atau implisit. Base-register menangani juga memanfaatkan lokalitas referensi memori. Ini adalah nyaman berarti menerapkan segmentasi, yang telah dibahas dalam Bab 8. Dalam beberapa implementasi, register segmen-basa tunggal digunakan dan digunakan implisit. Di lain, programmer dapat memilih mendaftarkan untuk memegang alamat dasar dari sebuah segmen, dan instruksi referensi harus secara eksplisit. Dalam kasus yang terakhir ini, jika
panjang field alamat adalah K dan jumlah register yang mungkin adalah N, maka salah satu instruksi dapat referensi salah satu dari daerah N dari 2 kata
K.
Indexing Untuk pengindeksan, penafsiran biasanya sebagai berikut: Alamat field referensi alamat memori utama, dan register direferensikan berisi positif perpindahan dari alamat tersebut. Perhatikan bahwa penggunaan ini hanya kebalikan dari interpretasi untuk base-register pengalamatan. Tentu saja, itu lebih dari hanya masalah interpretasi pengguna. Karena field alamat yang dianggap sebagai alamat memori dalam pengindeksan, umumnya mengandung bit lebih dari field alamat dalam suatu sebanding base-register instruksi. Juga, kita akan melihat bahwa ada beberapa perbaikan untuk pengindeksan yang tidak akan bermanfaat dalam konteks base-register. Namun demikian, Cara menghitung EA adalah sama untuk kedua base-register pengalamatan dan pengindeksan, dan dalam kedua kasus acuan register kadang-kadang eksplisit dan kadang-kadang implisit (untuk tipe prosesor yang berbeda) Penggunaan penting dari pengindeksan adalah menyediakan mekanisme yang efisien untuk permembentuk operasi iteratif. Perhatikan, misalnya, daftar nomor yang tersimpan mulai di lokasi A. Misalkan kita ingin menambahkan 1 untuk setiap elemen dalam daftar. Kami perlu mengambil nilai masing-masing, tambahkan 1 untuk itu, dan menyimpannya kembali, Urutan-iklan yang efektif gaun yang kita butuhkan adalah A, A + 1, A + 2,. . daftar., hingga terakhir lokasi di. Dengan pengindeksan, hal ini mudah dilakukan. Nilai A disimpan dalam kolom alamat instruksi, dan register yang dipilih, yang disebut register indeks, diinisialisasi ke 0. Setelah setiap operasi, register indeks bertambah 1. Karena register indeks biasanya digunakan untuk tugas iteratif seperti itu adalah ciri khas bahwa ada kebutuhan untuk kenaikan atau penurunan indeks register setelah setiap referensi untuk itu. Karena ini adalah suatu operasi umum, beberapa sistem akan secara otomatis
melakukan hal ini sebagai bagian dari siklus instruksi yang sama. Ini dikenal sebagai autoindexing. Jika tertentu register yang ditujukan khusus untuk pengindeksan, kemudian autoindexing dapat diakses secara implisit dan secara otomatis. Jika tujuan umum digunakan register, operasi autoindex mungkin perlu ditandai dengan sedikit di instruksi. Autoindexing menggunakan kenaikan dapat digambarkan sebagai berikut EA = A + (R) (R) (R) + 1 Dalam beberapa mesin, baik langsung pengalamatan dan mengindeks disediakan, dan adalah mungkin untuk menggunakan kedua dalam instruksi yang sama. Ada dua kemungkinan: yang pengindeksan dilakukan baik sebelum atau setelah tipuan tersebut. Jika pengindeksan dilakukan setelah tipuan, itu disebut postindexing: EA = (A) + (R) Pertama, isi field alamat yang digunakan untuk mengakses lokasi memori yang berisi alamat langsung. Alamat ini kemudian diindeks oleh nilai register. Teknik ini berguna untuk mengakses salah satu dari sejumlah blok data format tetap. Untuk Misalnya, hal itu dijelaskan pada Bab 8 bahwa sistem operasi harus mempekerjakan pengendalian proses blok untuk setiap proses. Operasi yang dilakukan adalah sama terlepas dari blok yang sedang dimanipulasi. Dengan demikian, alamat dalam instruksi bahwa referensi blok tersebut bisa menunjukkan ke lokasi (nilai = A) yang berisi variabel pointer ke awal dari sebuah blok kontrol proses. Register index berisi perpindahan dalam blok. Dengan preindexing mengindeks dilakukan sebelum tipuan ini: EA = (A + (R)) Sebuah alamat dihitung sebagai dengan pengindeksan sederhana. Dalam hal ini Namun, yang dihitung
alamat berisi bukan operan, namun alamat dari operan. Sebuah contoh penggunaan teknik ini adalah untuk membangun sebuah tabel cabang multiway. Pada tertentu titik dalam sebuah program, mungkin ada cabang ke salah satu dari sejumlah lokasi tergantung pada kondisi. Sebuah meja alamat dapat diatur mulai di lokasi A. Dengan pengindeksan ke dalam tabel ini lokasi yang dibutuhkan dapat ditemukan. Biasanya, sebuah set instruksi tidak akan mencakup baik preindexing dan postindexing. Stack
Addressing
Mode pengalamatan akhir yang kita anggap adalah pengalamatan stack. Sebagaimana didefinisikan dalam Lampiran 9A, stack adalah array linier lokasi Hal ini kadang-kadang disebut sebagai suatu pushdown daftar atau terakhir-in first-out-antrian. Tumpukan adalah sebuah blok reserved lokasi. Item yang ditambahkan ke puncak stack sehingga, pada waktu tertentu, blok adalah sebagian diisi. Terkait dengan stack adalah pointer yang nilainya adalah alamat bagian atas dari stack. Atau, dua atas elemen dari stack mungkin berada di register prosesor, dalam hal ini stack pointer referensi ketiga unsur tumpukan (Gambar 10.14b). The stack pointer di register dipertahankan. Oleh karena itu, referensi untuk stack lokasi di memori sebenarnya mendaftar alamat tidak langsung. Modus tumpukan pengalamatan adalah bentuk tersirat pengalamatan. Mesin instruksi tidak perlu menyertakan referensi memori, tetapi secara implisit beroperasi di atas dari stack. 11.2 x86 DAN CAR A MENANGANI AR M X86 Addressing Mode
Ingat dari angka 8.21 bahwa mekanisme translasi alamat x86 menghasilkan alamat, disebut afektif alamat virtual, yang merupakan offset dalam segmen. Jumlah alamat awal dari segmen dan alamat afektif menghasilkan alamat linear. Jika paging digunakan, alamat linier ini harus lulus melalui mekanisme-
terjemahan halaman untuk menghasilkan alamat fisik. Dalam hal berikut, kita mengabaikan langkah terakhir karena transparan ke set instruksi dan ke pemrogram. x86 ini dilengkapi dengan berbagai mode pengalamatan dimaksudkan untuk memungkinkan pelaksanaan efisien bahasa tingkat tinggi. Gambar 11.2 menunjukkan logika yang terlibat. Register segmen menentukan segmen yang merupakan subjek referensi. Ada enam register segmen, salah satu yang digunakan untuk referensi tertentu tergantung pada konteks pelaksanaan dan instruksi. Setiap register segmen memegang indeks ke dalam tabel deskriptor segmen (gambar 8.20), yang memegang alamat awal dari segmen yang sesuai. Terkait dengan masing-masing terlihat segmen register-pengguna adalah deskriptor segmen register (bukan programmer terlihat), yang mencatat hak akses untuk segmen serta alamat awal dan batas (panjang) dari segmen.Selain itu, ada dua register yang dapat digunakan dalam membangun sebuah alamat, register basis dan register indeks.
Tabel 11.2 daftar x86 mode pengalamatan. Mari kita pertimbangkan masing-masing pada gilirannya.
Untuk mode langsung, operan termasuk dalam instruksi. Operan bisa byte, word, atau doubleword data. Untuk mendaftar modus operan, operan terletak di register. Untuk petunjuk umum, seperti transfer data, aritmatika, dan instruksi logis, operan bisa menjadi salah satu bit umum register-32 (WAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP), salah satu dari 16 - bit register umum (AX, BX, CX, DX, SI, DI, SP, BP), atau salah satu bit umum register-8 (AH, BH, CH, DH, AL, BL, CL, DL). Ada juga beberapa petunjuk bahwa referensi pemilih register segmen (CS, DS, ES, SS, FS, GS). Sisanya referensi lokasi mode pengalamatan dalam memori. Lokasi memori harus ditentukan dalam hal segmen yang berisi lokasi dan offset dari awal segmen. Dalam beberapa kasus, segmen ditentukan secara eksplisit, pada orang lain, segmen ini ditentukan oleh aturan-aturan sederhana yang menetapkan segmen secara default. Dalam modus perpindahan, dengan operan offset (alamat efektif tokoh 11.2) terkandung bagian dari instruksi sebagai perpindahan 8, 16 32-bit. Dengan segmentasi, semua alamat dalam instruksi hanya merujuk ke offset dalam segmen. The mode pengalamatan perpindahan ditemukan di beberapa mesin karena, seperti yang disebutkan sebelumnya, itu mengarah dengan petunjuk panjang. Dalam kasus x86, menangani perpindahan dapat berguna untuk variabel global referensi. Mode pengalamatan yang tersisa tidak langsung, dalam arti bahwa bagian alamat dari instruksi prosesor memberitahu ke mana harus mencari untuk menemukan alamat. Mode dasar menetapkan bahwa salah satu dari 8, 16, atau 32-bit register berisi alamat efektif. Ini sama dengan apa yang telah kita disebut sebagai pengalamatan register tidak langsung.
Pada dasar dengan modus perpindahan, instruksi mencakup perpindahan yang akan ditambahkan ke register dasar, yang mungkin salah satu dari tujuan-register umum. Contoh penggunaan mode ini adalah sebagai berikut: o
o
o
Digunakan oleh kompilator ke titik ke awal area variabel lokal. Sebagai contoh, register dasar bisa menunjukkan ke awal frame stack, yang berisi variabel lokal untuk prosedur yang sesuai. Digunakan untuk indeks ke sebuah array ketika ukuran elemen bukan 1, 2, 4, atau 8 byte dan yang karenanya tidak dapat diindeks dengan menggunakan indeks mendaftar. Dalam hal ini, poin perpindahan ke awal array, dan base register memegang hasil perhitungan untuk menentukan offset ke elemen tertentu dalam array. Digunakan untuk mengakses bidang rekaman. Register poin dasar ke awal catatan, sedangkan perpindahan merupakan offset ke lapangan.
Dalam indeks modus perpindahan skala, instuction mencakup perpindahan yang akan ditambahkan ke register, dalam hal ini disebut indeks mendaftar. Register indeks mungkin salah satu dari tujuan-register umum kecuali satu yang disebut ESP, yang umumnya digunakan untuk stack pengolahan. Dalam menghitung alamat efektif, contens dari register indeks dikalikan dengan faktor skala 1 2, 4, atau 8, dan kemudian ditambahkan ke displacement. Mode ini sangat nyaman untuk pengindeksan array. Faktor skala dari 2 dapat digunakan untuk array integer 16-bit. Faktor skala dari 4 dapat digunakan untuk bilangan bulat 32-bit atau angka floating-point. Akhirnya, faktor skala dari 8 dapat digunakan untuk array-presisi floating-point nomor ganda. Dasar dengan dan perpindahan mode indeks jumlah isi dari base register, register indeks, dan displacement untuk membentuk alamat efektif. Sekali lagi, register dasar bisa tujuan apapun-register umum dan register indeks dapat tujuan umum mendaftar kecuali ESP. Sebagai contoh, ini mode pengalamatan dapat digunakan untuk mengakses array lokal pada stack frame. Mode ini juga dapat digunakan untuk mendukung array dimensi dua, dalam hal ini, poin perpindahan ke awal array, dan mendaftarkan masing-masing menangani satu dimensi dari array. bersisik didasarkan dengan modus perpindahan jumlah isi dari index register dikalikan dengan faktor skala, isi dari register dasar, dan perpindahan. Hal ini berguna jika array disimpan dalam bingkai stack, dalam hal ini, elemen array akan menjadi 2, 4, atau 8 byte panjangnya masingmasing. Mode ini juga menyediakan pengindeksan yang efisien dari array dua dimensi ketika elemen array adalah 2, 4, atau 8 byte panjangnya. Indeks
Akhirnya, relatif pengalamatan dapat digunakan dalam-of-control instruksi transfer. perpindahan ditambahkan ke nilai dari program counter, yang menunjuk ke instruksi berikutnya.Dalam hal ini, perpindahan diperlakukan sebagai byte ditandatangani, word, atau doubleword, nilai dan bahwa nilai bertambah atau berkurang, alamat dalam program counter. AR M Addressing Mode
Biasanya, mesin RISC, tidak seperti mesin CISC, menggunakan dan relatif mudah mengatur mode pengalamatan sederhana. Arsitektur ARM agak berangkat dari tradisi ini dengan menyediakan kaya set mode pengalamatan yang relatif. Modus ini yang paling mudah diklasifikasikan sehubungan dengan jenis iinstruksi.
LOAD / STORE MENANGANI Load
dan menyimpan instruksi adalah satu-satunya petunjuk bahwa memori referensi. Hal ini selalu dilakukan secara tidak langsung melalui base register plus offset.Ada tiga alternatif berkenaan dengan pengindeksan (gambar 11.3): o
o
untuk metode pengalamatan, pengindeksan tidak digunakan. Nilai offset ditambahkan ke atau dikurangkan dari nilai dasar register membentuk alamat memori. Sebagai contoh menggambarkan sosok 11.3a metode ini dengan instruksi bahasa assembly STRB r0, (r1, # 12). Ini adalah instruksi byte toko. Dalam hal ini alamat base di register r1 dan perpindahan merupakan nilai langsung dari 12 desimal. Alamat yang dihasilkan (base plus offset) adalah lokasi dimana paling signifikan byte dari r0 akan disimpan. Preindex: Alamat memori id terbentuk dengan cara yang sama untuk mengatasi offset. Alamat memori juga ditulis kembali ke base register. Dalam 'lain' kata-kata, nilai Offset:
o
base register bertambah atau decremented oleh nilai offset. Gambar 11.3b mengilustrasikan metode ini dengan instruksi bahasa assembly STRB r0, (r1, # 12)!. Tanda seru menandakan preindexing. Postindex: Alamat memori adalah nilai base register. Sebuah offset ditambahkan ke atau dikurangkan dari nilai dasar register dan hasilnya ditulis kembali ke base register. Gambar 11.3c mengilustrasikan metode ini dengan instruksi bahasa assembly STRB r0, (r1), # 12.
Perhatikan bahwa apa ARM mengacu sebagai register dasar bertindak sebagai indeks untuk mendaftar preindex dan postindex pengalamatan. Nilai offset bisa menjadi nilai langsung disimpan dalam instruksi atau dapat di register lain. Jika nilai offset di register, fitur lain yang bermanfaat adalah Model yang dikembangkan: skala mendaftar pengalamatan. Nilai dalam register offset skala oleh salah satu operator shift: Shift Logocal Waktu, Logical Shift Kanan, Arithmetic Shift Kanan, Putar Kanan, atau Putar kanan Extended (yang meliputi membawa bit rotasi). Besarnya pergeseran tersebut ditetapkan sebagai nilai langsung dalam instruksi. MENANGANI PENGOLAHAN DATA INSTRUKSI instruksi
pemrosesan data menggunakan salah satu register pengalamatan dari campuran mendaftar dan langsung menangani. Untuk mendaftar menangani, nilai di salah satu operan register mungkin skala menggunakan salah satu dari lima operator pergeseran didefinisikan dalam paragraf sebelumnya.
hanya bentuk pengalamatan untuk instruksi cabang segera menangani. Instruksi cabang-bit berisi nilai 24. Untuk perhitungan alamat, nilai ini bergeser ke kiri 2 bit, sehingga alamat berada di batas kata. Dengan demikian cakupan alamat efektif adalah ± 32 MB dari program counter.
INSTRUKSI
Mereka CABANG
LOAD / STORE MULTIPLE beberapa
instruksi Load MENANGANI memuat subse (mungkin semua) dari tujuan-register umum dari memori. Beberapa petunjuk Toko toko subset (mungkin semua) tujuan-umum register ke memori. Daftar register untuk beban atau simpan ditentukan dalam field 16-bit dalam instruksi dengan masing-masing bit sesuai dengan salah satu dari 16 register.Memuat dan menyimpan Beberapa mode pengalamatan menghasilkan berbagai berurutan alamat memori. Register bernomor terendah adalah disimpan di alamat memori terendah dan register nomor tertinggi di alamat memori tertinggi. Empat mode pengalamatan yang digunakan (gambar 11.4): kenaikan setelah, kenaikan sebelum, pengurangan setelah, dan pengurangan sebelumnya.Sebuah register dasar menentukan sebuah alamat memori utama di mana nilai-nilai register yang disimpan di dalam atau dimuat dari dalam urutan (kelipatan) atau turun word lokasi penurunan. Incrementing atau decrementing dimulai baik sebelum atau sesudah akses memori pertama.
Instruksi-instruksi ini berguna untuk beban blok atau toko, stack operasi, dan keluar urutan prosedur. 11.3 FOR MAT INSTRUKSI
Format instruksi mendefinisikan tata letak bit instruksi, dalam hal penyusunnya. Format instruksi harus mencakup opcode dan secara implisit atau eksplisit, nol atau lebih operan. Setiap operan eksplisit direferensikan menggunakan salah satu mode pengalamatan yang dijelaskan dalam Bagian 11.1. Format ini harus, secara implisit maupun eksplisit, menunjukkan mode pengalamatan untuk operan masingmasing. Untuk set instruksi yang paling kompleks, digunakan lebih dari satu format instruksi. Perancangan format instruksi adalah seni yang kompleks, dan berbagai desain yang menakjubkan telah dilaksanakan. Kita memeriksa masalah desain tombol, melihat sekilas beberapa desain untuk mengilustrasikan poin, dan kemudian kita memeriksa x86 dan solusi ARM secara rinci.
Instruksi Panjang
Desain masalah dasar yang paling harus dihadapi adalah panjang format instruksi. Keputusan ini mempengaruhi dan dipengaruhi oleh, ukuran memori, organisasi memori, struktur bus, kompleksitas prosesor, dan kecepatan prosesor. Keputusan ini menentukan kekayaan dan fleksibilitas dari mesin seperti yang terlihat oleh programmer bahasa assembly. Yang paling jelas trade-off di sini adalah antara keinginan untuk repertoar instruksi yang kuat dan kebutuhan untuk menghemat ruang. Programmer ingin lebih opcode, operand lebih, mode pengalamatan yang lebih, dan rentang alamat yang lebih besar. opkode Semakin operan lebih mempermudah hidup programmer, karena program lebih pendek dapat ditulis untuk menyelesaikan tugas yang diberikan. Demikian pula, mode pengalamatan yang lebih besar programmer diberikan fleksibilitas dalam melaksanakan fungsi-fungsi tertentu, seperti manipulasi tabel dan multiple-jalan bercabangDan, tentu saja, dengan peningkatan ukuran memori utama dan meningkatnya penggunaan memori virtual, programmer ingin dapat alamat rentang memori lebih besar. Semua hal-hal ini (opcode, operand, mode pengalamatan, kisaran alamat) memerlukan bit dan mendorong ke arah panjang instruksi yang lebih panjang. Tapi panjang instruksi yang lebih panjang mungkin menjadi boros. A-bit instruksi 64 kali menempati ruang sebuah instruksi 32-bit tetapi mungkin kurang dari dua kali berguna. Selain ini dasar perdagangan-dari, ada pertimbangan lain. Entah panjang instruksi harus sama dengan panjang-transfer memori (dalam sistem bus, data bus panjang) atau salah satu harus kelipatan dari yang lain. Jika tidak, kita tidak akan mendapatkan nomor yang tidak terpisahkan dari instruksi selama siklus menjemput. Sebuah terkait pertimbangan adalah transfer rate memori. Angka ini tidak terus dengan
peningkatan kecepatan prosesor. Dengan demikian, memori bisa menjadi bottleneck jika prosesor dapat mengeksekusi instruksi lebih cepat daripada yang bisa mengambil mereka. Satu solusi untuk masalah ini adalah dengan menggunakan memori cache (lihat Bagian 4.3); lain adalah dengan menggunakan instruksi lebih pendek. Dengan demikian, 16-bit instruksi dapat diambil pada tingkat dua kali dari 32-bit instruksi tapi mungkin dapat dilaksanakan kurang dari dua kali dengan cepat. Sebuah duniawi namun demikian penting fitur yang tampaknya adalah bahwa instruksi panjang harus kelipatan dari panjang karakter, yang biasanya 8 bit, dan dari panjang-titik nomor tetap. Untuk melihat ini, kita perlu menggunakan yang sayangnya tidak jelas kata, kata [FRAI83]. Panjang kata memori, dalam beberapa akal, "alami" unit organisasi. Ukuran word biasanya menentukan ukuran titik nomor tetap (biasanya dua adalah sama). Ukuran Kata juga biasanya sama dengan, atau setidaknya secara integral terkait dengan, ukuran transfer memori.Karena bentuk umum data data karakter, kami ingin sebuah kata untuk menyimpan terpisahkan jumlah karakter. Jika tidak, ada terbuang bit dalam setiap kata ketika menyimpan beberapa karakter, atau karakter akan harus mengangkang batas kata.Pentingnya hal ini adalah sedemikian rupa sehingga IBM, ketika memperkenalkan System/360 dan ingin menggunakan 8-bit karakter, membuat keputusan untuk memindahkan memilukan dari arsitektur 36-bit anggota ilmiah dari seri 700/7000 ke 32-bit arsitektur.
Alokasi Bits Kami telah melihat beberapa faktor yang masuk ke menentukan panjang instruksi format. Sebuah sulit masalah yang sama adalah bagaimana mengalokasikan bit dalam format tersebut. The trade-off di sini adalah kompleks. Untuk panjang instruksi yang diberikan, jelas ada trade-off antara nomor dari opcode dan kekuatan kemampuan pengalamatan. Opkode Lebih jelas berarti bit lebih di bidang opcode Untuk format instruksi panjang yang diberikan, ini mengurangi jumlah bit yang tersedia untuk mengatasi Ada satu penyempurnaan menarik ini trade-off, dan itu adalah penggunaan-panjang opkode variable. Dalam pendekatan ini, terdapat panjang opcode minimum tetapi, untuk beberapa opkode, operasi tambahan mungkin ditentukan dengan menggunakan bit tambahan dalam instruksi. Untuk panjang instruksi tetap, daun ini lebih sedikit bit untuk mengatasi. fitur ini digunakan untuk instruksi tersebut yang membutuhkan operan lebih sedikit dan / atau kurang kuat menangani. Faktor-faktor yang saling terkait berikut masuk ke dalam penentuan penggunaan pengalamatan bit. Jumlah mode pengalamatan: Kadang-kadang mode pengalamatan dapat diindikasikan implisit. Sebagai contoh, opkode tertentu selalu mungkin panggilan untuk pengindeksan. Dalam kasus lain, mode pengalamatan harus jelas, dan satu atau lebih mode bit akan dibutuhkan. Jumlah operan: Kami telah melihat bahwa alamat lebih sedikit dapat membuat lebih lama, lebih canggung program (misalnya, Gambar 10.3). Khas instruksi pada hari ini menyediakan mesin untuk dua operan Setiap alamat operan dalam instruksi mungkin memerlukan modus sendiri indikator, atau penggunaan indikator mode bisa terbatas hanya salah satu bidang alamat. Register versus memori: Sebuah mesin harus memiliki registernya sehingga data dapat dibawa ke dalam prosesor untuk diproses Dengan register user-terlihat tunggal (Biasanya disebut akumulator), satu alamat operan implisit dan mengkonsumsi tidak ada bit instruksi Namun, satu-register pemrograman adalah aneh dan membutuhkan banyak instruksi Bahkan dengan beberapa register, hanya beberapa bit Semakin banyak yang register dapat digunakan untuk referensi operan, lebih sedikit menggigit diperlukan. Sejumlah penelitian menunjukkan bahwa total 8 sampai 32-terlihat register user yang diinginkan [LUND77, HUCK83]. Kebanyakan arsitektur kontemporer memiliki sedikitnya 32 register. Jumlah set register: mesin kontemporer Kebanyakan memiliki satu set tujuan umum Register, dengan biasanya 32 atau lebih register di set dapat digunakan untuk menyimpan data dan dapat digunakan untuk menyimpan alamat untuk perpindahan pengalamatan. Beberapa arsitektur, termasuk dari x86, memiliki koleksi dua atau lebih khusus set (seperti data dan perpindahan). Satu keuntungan dari pendekatan yang terakhir adalah bahwa, untuk sejumlah tetap dari register, pemecahan fungsional memerlukan bit yang
lebih sedikit untuk digunakan dalam instruksi. Sebagai contoh, dengan dua set the opcode or delapan register, hanya 3 bit yang diperlukan untuk mengidentifikasi sebuah register, yang opkode atau mode register akan menentukan set register yang direferensikan. Alamat kisaran: Untuk alamat bahwa referensi memori, kisaran alamat yang bisa dirujuk berkaitan dengan jumlah bit alamat Karena ini membebankan pembatasan parah, langsung menangani jarang digunakan. Dengan perpindahan pengalamatan, rentang dibuka sampai panjang dari alamat register. Bahkan,masih nyaman untuk memungkinkan pemindahan lebih besar dari alamat register,yang membutuhkan sejumlah besar relatif bit alamat dalam instruksi. Alamat granularity: Untuk alamat bahwa memori referensi daripada register, faktor lain adalah granularity menangani. Dalam sebuah sistem dengan 16 - atau 32-bit kata-kata, alamat referensi dapat kata atau byte pada desainer pilihan. Byte pengalamatan yang nyaman untuk manipulasi karakter tetapi membutuhkan, untuk ukuran-tetap memori, bit alamat lebih. Dengan demikian, perancang dihadapkan dengan sejumlah faktor untuk mempertimbangkan dan keseimbangan. Bagaimana Kritis berbagai pilihan tidak jelas. Sebagai contoh, kita mengutip sebuah penelitian [CRAG79] bahwa dibandingkan pendekatan instruksi berbagai format, termasuk penggunaan stack, akumulator, dan hanya memori-untuk-mendaftar pendekatan Dengan menggunakan set konsisten asumsi, tidak ada perbedaan yang signifikan dalam kode atau ruang eksekusi waktu diamati. Mari kita secara singkat melihat bagaimana dua desain mesin historis menyeimbangkan berbagai faktor. PDP-8 salah satu dari desain-instruksi sederhana untuk tujuan-komputer umum adalah karena dia PDP-8 [BELL78b]. PDP-8 menggunakan 12-bit instruksi dan beroperasi pada bit-kata 12. Ada sebuah register umum-tujuan tunggal, akumulator. Meskipun keterbatasan desain, pengalamatan cukup fleksibel. Setiap referensi memori terdiri dari 7 bit ditambah dua bit pengubah 1. Memori dibagi menjadi panjang halaman tetap 2 7 = 128 kata-kata masingmasing. Alamat perhitungan didasarkan pada referensi ke halaman 0 atau halaman saat ini (halaman yang berisi instruksi ini) yang ditetapkan oleh sedikit halaman. Pengubah Bit kedua menunjukkan apakah langsung atau tidak langsung menangani akan digunakan.Kedua mode dapat digunakan dalam kombinasi, sehingga alamat tidak langsung adalah alamat 12-bit yang terkandung dalam kata-kata 0 halaman atau halaman saat ini. Selain itu, 8 kata-kata khusus pada halaman 0 auto indeks "register. Ketika sebuah referensi tidak langsung dibuat untuk salah satu lokasi, preindexing terjadi. Gambar 11.5 menunjukkan PDP-8 format instruksi adalah bit opcode 3 dan tiga jenis instruksi. Untuk opkode 0 sampai 5, format adalah-alamat memori instruksi tunggal referensi termasuk sedikit halaman dan sedikit tidak langsung. Dengan demikian, hanya ada enam operasi dasar. Untuk memperbesar operasi, opcode 7 mendefinisikan referensi mendaftar atau microinstruction. Dalam format ini, bit-bit sisanya digunakan untuk mengkodekan operasi tambahan. Secara umum, setiap bit mendefinisikan operasi tertentu (misalnya, akumulator jelas), dan ini bisa menjadi bit instruksi tunggal. Strategi microinstruction digunakan sejauh PDP-1 oleh DEC dan, dalam arti, seorang pelopor microprogrammed mesin hari ini, yang akan dibahas dalam Bagian Keempat. Opcode 6 adalah I / O operasi; 6 bit yang digunakan untuk memilih salah satu dari 64 perangkat, dan 3 bit menentukan saya tertentu / perintah O.
PDP-8 instruksi format sangat efisien. Ini secara tidak langsung mendukung pengalamatan, perpindahan pengalamatan, dan pengindeksan. Dengan menggunakan ekstensi opcode, mendukung total sekitar 35 instruksi. Mengingat kendala sedikit panjang instruksi-12, para desainer tidak bisa melakukannya lebih baik. PDP-10 A kontras dengan set instruksi PDP-8 adalah bahwa dari PDP-10. PDP-10 ini dirancang untuk menjadi-berbagi sistem-skala waktu besar, dengan penekanan pada pembuatan sistem mudah untuk program, bahkan jika beban hardware tambahan terlibat. Di antara prinsip-prinsip desain yang digunakan dalam merancang set instruksi adalah sebagai berikut [BELL78c]: o
o
o
Ortogonal: ortogonal adalah prinsip di mana dua variabel yang independen satu sama lain. Dalam konteks set instruksi, istilah ini menunjukkan bahwa unsur-unsur lain dari instruksi adalah independen (tidak ditentukan oleh) opcode. PDP-10 desainer menggunakan istilah untuk menggambarkan fakta bahwa alamat selalu dihitung dengan cara yang sama, independen dari opcode. Ini berbeda dengan banyak mesin, di mana modus alamat kadang-kadang tergantung secara implisit pada operator yang digunakan. Kelengkapan: Setiap aritmatika tipe data (integer, fixed-point, floating-point) harus memiliki dan identik set lengkap operasi. Langsung menangani: Base perpindahan plus pengalamatan, yang menempatkan beban organisasi memori pada programmer, itu dihindari mendukung langsung menangani.
masing-masing uang muka prinsip tujuan utama dari kemudahan pemrograman. PDP-10 memiliki panjang kata-bit 36 dan panjang instruksi 36 bit. Format instruksi tetap ditunjukkan pada Gambar 11.6. opcode menempati 9 bit, yang memungkinkan sampai 512 operasi. Bahkan, sebanyak 365 instruksi yang berbeda didefinisikan. Sebagian besar instruksi memiliki dua alamat, salah satunya adalah salah satu tujuan 16-register umum. Jadi, ini mulai referensi operan dengan bit alamat memori medan-18. Ini dapat digunakan sebagai operan langsung atau alamat memori. Dalam penggunaan terakhir, baik mengindeks dan tidak langsung pengalamatan yang diperbolehkan. Tujuan umum yang sama-register juga digunakan sebagai register indeks. Panjang instruksi-36bit adalah benar mewah. Tidak perlu untuk melakukan hal-hal pintar untuk mendapatkan opkode lebih, sebuah 9-bit field opcode lebih dari cukup. Addressing juga mudah. Sebuah alamat 18-bit pengalamatan langsung membuat diinginkan. Untuk ukuran memori lebih besar dari 2 18, tipuan disediakan. Untuk kemudahan programmer, pengindeksan disediakan untuk manipulasi tabel dan program iteratif. Juga, dengan bit operan bidang-18, segera menangani menjadi menarik.
PDP-10 desain set instruksi tidak mencapai tujuan yang tercantum sebelumnya [LUND77]. Ini memudahkan tugas programmer atau compiler dengan mengorbankan pemanfaatan ruang yang tidak efisien. Ini adalah pilihan sadar yang dibuat oleh para desainer dan karena itu tidak bisa disalahkan sebagai desain miskin. Variable-Length Instruksi
Contoh-contoh kita melihat sejauh ini telah menggunakan instruksi panjang tetap tunggal, dan kita telah secara implisit membahas trade-off dalam konteks itu. Tapi perancang dapat memilih bukan untuk menyediakan berbagai format instruksi dengan panjang yang berbeda. Taktik ini memudahkan untuk memberikan repertoar besar opkode, dengan panjang opcode yang berbeda. Mengatasi dapat lebih fleksibel, dengan berbagai kombinasi mendaftar dan referensi memori ditambah mode pengalamatan. Dengan-panjang instruksi variabel, banyak variasi ini dapat disediakan secara efisien dan kompak. Harga pokok untuk membayar panjang instruksi variabel adalah peningkatan kompleksitas prosesor. harga hardware Jatuh, penggunaan pemrograman mikro (dibahas dalam Bagian empat), dan peningkatan umum dalam memahami prinsip-prinsip desain prosesor kesemuanya memiliki kontribusi untuk membuat ini harga kecil untuk membayar. Namun, kita akan melihat bahwa RISC dan mesin superscalar dapat memanfaatkan penggunaan panjang instruksi tetap untuk memberikan peningkatan kinerja. Penggunaan instruksi-panjang variabel tidak menghapus keinginan dari membuat semua panjang instruksi secara integral berhubungan dengan panjang kata. Karena prosesor tidak mengetahui panjang
instruksi berikutnya yang akan diambil, strategi yang umum adalah untuk mengambil sejumlah byte atau kata sama dengan sedikitnya instruksi mungkin terpanjang. Ini berarti bahwa beberapa instruksi terkadang diambil. Namun seperti yang akan kita lihat dalam bab 12, ini adalah strategi yang baik untuk diikuti dalam hal apapun. PDP-11 dirancang untuk memberikan instruksi kuat dan fleksibel diatur dalam batasan suatu-bit minicomputer 16 [BELL70]. PDP-11
PDP-11 mempekerjakan delapan set 16-bit register tujuan umum. Dua register ini memiliki makna tambahan: satu adalah digunakan sebagai pointer stack untuk tujuan khusus stack operasi, dan satu digunakan sebagai program counter, yang berisi alamat dari instruksi berikutnya. Gambar 11.7 menunjukkan PDP-11 format instruksi. Tiga belas format yang berbeda yang digunakan, meliputi nol-, satu-, dan-alamat instruksi dua jenis. opcode bisa bermacam-macam 4-16 bit panjangnya. Daftar referensi adalah 6 bit panjangnya. Mengidentifikasi tiga bit register, dan sisanya 3 bit mengidentifikasi mode pengalamatan. PDP-11 adalah diberkahi dengan kaya set mode pengalamatan. Satu keuntungan dari menghubungkan mode pengalamatan ke operan daripada opcode seperti yang kadang-kadang dilakukan, adalah bahwa setiap mode pengalamatan dapat digunakan dengan opcode apapun. Seperti yang telah disebutkan, kemerdekaan ini. PDP-11 instrukti-instruksi biasanya satu kata (16 bit) panjangnya. Untuk beberapa petunjuk, satu atau dua alamat memori yang ditambahkan, sehingga 32-bit dan instruksi 48-bit adalah bagian dari repertoar. Ini memberikan fleksibilitas lebih lanjut dalam pemberiaan alamat. PDP-11 set instruksi dan kemampuan pengalamatan kompleks. Hal ini meningkatkan biaya baik hardware dan kompleksitas pemrograman. Keuntungannya adalah bahwa efisien atau kompak program yang lebih dapat dikembangkan.
Angka di bawah lapangan menunjukkan panjang bit Sumber dan tujuan masing-masing berisi sebuah-bit mode 3 lapangan dan sedikit mendaftarkan nomor-3 FP menunjukkan salah satu dari empat register floating-point R menunjukkan salah satu dari tujuan-register umum CC adalah kode kondisi lapangan
Kebanyakan arsitektur VAX menyediakan sejumlah kecil instruksi format yang relatif tetap. Hal ini dapat menyebabkan dua masalah bagi programmer. Pertama, mode pengalamatan dan opcode tidak ortogonal. Sebagai contoh, untuk suatu operasi tertentu inheren membutuhkan operan lebih, berbagai strategi harus digunakan untuk mencapai hasil yang diinginkan menggunakan dua atau lebih instruksi. Untuk menghindari masalah ini, dua kriteria yang digunakan dalam merancang format instruksi VAX [STRE78]: 1. 2.
Semua instruksi harus memiliki 'alami' jumlah dari operan. Semua operand harus memiliki spesifikasi yang sama pada umumnya Hasilnya adalah instruksi format variabel tinggi. Sebuah instruksi terdiri dari byte atau 2-byte opcode 1 diikuti dari nol sampai enam penspesifikasi operan, tergantung pada opcode. Panjang minimal instruksi 1 byte, dan petunjuk sampai dengan 37 byte dapat dibangun. Gambar 11.8 memberikan beberapa contoh.
Heksadesimal
Penjelasan
Format
Assembler Notasi dan Deskripsi
Opkode untuk RSB
RSB Kembali dari subroutine
Opcode untuk CLRL Register R9
CLRL R9 Hapus register R9
Opcode untuk MOVW MOVW 356 (R4), 25 (R11) modus perpindahan Word, Pindah kata dari alamat register R4 yang isinya ditambah 356 356 dalam heksadesimal dari R4 ke alamat yang Modus perpindahan byte, 25 isi ditambah R11 register R11 25 dalam heksadesimal Opcode untuk ADDL3 ADDL3 5, # R0, @ A [R2] literal pendek 5 Tambahkan 5 ke integer 32Mode register R0 bit di R0 dan menyimpan Indeks awalan R2 hasilnya dalam lokasi yang Kata tidak langsung relatif alamatnya adalah jumlah A (Perpindahan dari PC) dan 4 kali isi R2 Jumlah perpindahan Dari PC relatif ke lokasi A
Instruksi VAX dimulai dengan-byte opcode 1. Hal ini sudah cukup untuk menangani VAX instruksi yang paling. Namun, karena ada lebih dari 300 instruksi yang berbeda, 8 bit tidak cukup. Kode heksadesimal FD dan FF merupakan perluasan yang ditetapkan dalam byte kedua. Sisa dari instruksi terdiri dari sampai dengan enam specifier operan. Sebuah specifier operan adalah, pada minium, byte format 1 di mana 4 bit paling kiri adalah mode specifier alamat. Satu-satunya pengecualian aturan ini adalah modus literal, yang ditandai dengan pola 00 dalam bit paling kiri 2, meninggalkan ruang untuk-bit 6 literal. Karena pengecualian ini, total 12 mode pengalamatan yang berbeda dapat ditentukan. Sebuah specifier operan sering terdiri dari hanya satu byte, dengan 4 bit paling kanan yang menetapkan salah satu register 16-tujuan umum. Panjang specifier operan dapat diperpanjang dalam salah satu dari dua cara. Pertama, nilai konstan atau lebih byte orang dapat segera mode, di mana 8 -, 16 -, atau 32 perpindahan bit digunakan. Kedua, indeks mode pengalamatan dapat digunakan. Dalam hal ini, byte pertama dari specifier operan terdiri dari bit mode pengalamatan kode-4 dari 0100 dan sedikit register indeks-4 identifier. Sisa dari specifier operan terdiri dari specifier alamat dasar, yang mungkin sendiri menjadi salah satu atau lebih byte panjangnya. Pembaca mungkin bertanya-tanya, sebagai penulis itu, apa jenis instruksi membutuhkan enam operan. Anehnya, VAX memiliki sejumlah instruksi tersebut. Mempertimbangkan
ADDP6 op1, op2, OP3, OP4, OP5, OP6 Instruksi ini menambahkan dua angka desimal dikemas. Op1 dan op2 menentukan panjang dan alamat mulai dari satu string desimal; OP3 DAN OP4 menetapkan string kedua. String ini dua ditambahkan dan hasilnya disimpan dalam desimal string yang panjangnya dan lokasi awal yang ditentukan oleh OP5 dan OP6. Set instruksi VAX menyediakan untuk berbagai operasi dan mode pengalamatan. Hal ini memberikan programmer, seperti penulis compiler, yang kuat dan fleksibel untuk program alat yang sangat berkembang. Secara teori, ini harus mengarah pada kompilasi bahasa mesin efisien tingkat bahasa program-tinggi dan pada umumnya, dan efisien penggunaan efektif sumber daya prosesor. denda yang harus dibayarkan untuk imbalan ini kompleksitas prosesor meningkat dibandingkan dengan prosesor dengan set instruksi sederhana dan format. Kita kembali ke masalah ini dalam bab 13, di mana kita meneliti kasus untuk instruksi set yang sangat sederhana. Instruksi VAX dimulai dengan 1-byte opcode. l-byte ini cukup untuk menangani sebagian besar instruksi VAX. Namun, karena ada lebih dari 300 instruksi yang berbeda, 8 bit tidaklah cukup. Kode heksadesimal FD dan FF mengindikasikan opcode diperpanjang, dengan opcode aktual yang ditetapkan dalam byte kedua. Sisa dari instruksi terdiri dari enam operan. Sebuah operan spesifik adalah, minimal format 1-byte di mana 4 bit paling kiri adalah mode specifik alamat. Satu-satunya pengecualian aturan ini adalah modus literal, yang ditandai dengan pola 00 di paling kiri 2 bit, menyisakan ruang untuk sedikit 6-literal. Karena pengecualian ini, total 12 mode pengalamatan yang berbeda dapat ditentukan. Sebuah operan spesifik sering terdiri dari hanya satu byte, dengan 4 bit paling kanan yang menetapkan salah satu dari 16 register tujuan umum. Panjang specifier operan dapat diperpanjang dalam salah satu dari dua cara. Pertama, nilai konstan satu byte atau lebih segera dapat mengikuti byte pertama dari operan specifier. Contoh dari ini adalah modus perpindahan, di mana sebuah 8 -, 16 -, atau perpindahan 32-bit digunakan. Kedua, indeks mode pengalamatan dapat digunakan. Dalam hal ini, byte pertama dari specifier operan terdiri dari kode mode 4-bit pengalamatan 0100 dan sebuah register indeks 4-bit. Sisa dari specifier operan terdiri dari specifier alamat dasar, yang mungkin menjadi salah satu atau lebih byte panjangnya. Pembaca mungkin bertanya-tanya, apa jenis instruksi membutuhkan enam operan. Anehnya, VAX memiliki sejumlah instruksi tersebut. Mempertimbangkan
ADDP6OP1, Op2, OP3, OP4, OP5, OP6
Instruksi ini menambahkan dua angka desimal. Op1 dan op2 menentukan panjang dan alamat mulai dari satu string desimal; OP3 dan OP4 menetapkan string kedua. Kedua string ditambahkan dan hasilnya disimpan dalam desimal string yang panjangnya dan lokasi awal yang ditentukan oleh OP5 dan OP6. Set instruksi VAX menyediakan untuk berbagai operasi dan mode pengalamatan. Hal ini memberikan programmer, seperti penulis compiler, sebuah alat yang sangat kuat dan fleksibel untuk perkembangan program. Dalam teori ini harus mengarah pada kompilasi bahasa mesin, dan efisien program bahasa tingkat tinggi. Pada umumnya, untuk penggunaan yang efektif dan efisien sumber daya prosesor. Denda yang harus dibayarkan untuk imbalan kompleksitas prosesor meningkat dibandingkan dengan prosesor dengan set instruksi sederhana dan format. Kita kembali ke masalah ini dalam Bab 13, di mana kita meneliti kasus untuk set instruksi yang sangat sederhana.
11.4 x86 DAN AR M INSTRUCTION FOR MATS
Format Instruksi x86 x86 ini dilengkapi dengan berbagai format instruksi dari unsur-unsur yang dijelaskan dalam bagian ini, field opcode selalu ada. Gambar 11.9 mengilustrasikan format instruksi umum. Instruksi yang terdiri dari dari nol sampai empat prefiks instruksi opsional, 1 - atau 2-byte opcode, sebuah specifier alamat opsional (yang terdiri dari ModR di / byte m dan Indeks Skala byte) suatu perpindahan opsional, dan sebuah field langsung opsional.
Pertimbangan prefiks bytes: Instruksi prefiks: Awalan instruksi, jika ada, terdiri dari prefiks LOCK atau salah satu dari ulangan prefiks. KUNCI prefiks digunakan untuk memastikan penggunaan eksklusif memori bersama yang dipakai dalam lingkungan multiprosesor. Awalan dan ulangan menentukan operasi berulang string, yang memungkinkan x86 untuk string proses yang lebih cepat dibandingkan dengan software loop biasa. Ada lima prefiks ulang berbeda: REP, REPE, REPZ, REPNE, dan REPNZ. Ketika awalan REP mutlak hadir, operasi yang ditentukan dalam instruksi dieksekusi berulang kali berturut-turut pada unsur-unsur string, jumlah pengulangan ditentukan dalam awalan register CX. REP prefiks bersyarat menyebabkan instruksi mengulang sampai hitungan di CX pindah ke nol atau sampai kondisi terpenuhi. Segmen override: Secara eksplisit menentukan segmen register sebuah instruksi harus menggunakan, mengesampingkan pilihan default-register segmen yang dihasilkan oleh x86 untuk instruksi itu. Operand size: Sebuah instruksi memiliki ukuran standar operan dari 16 atau 32 bit, dan switch awalan operan antara 32-bit dan 16-bit operan.
Address size: prosesor dapat menggunakan alamat memori baik 16 - atau 32-bit alamat. Ukuran alamat menentukan ukuran perpindahan dalam instruksi dan ukuran offset alamat yang dihasilkan selama perhitungan alamat efektif. Salah satu ukuran ini ditetapkan sebagai standar, dan prefix ukuran alamat switch antara 32-bit dan generasi 16-bit alamat.
Instruksi itu sendiri meliputi bidang-bidang berikut: y
Opcode: Bidang opcode adalah 1, 2, atau 3 byte panjangnya. opcode juga dapat mencakup bit yang menentukan jika data byte-arah atau ukuran penuh (16 atau 32 bit, tergantung pada konteks), operasi data (ke atau dari memori), dan apakah bidang data langsung harus sign diperpanjang.
y
ModR / m: byte ini dan berikutnya, memberikan informasi pengalamatan. The ModR / m byte menentukan apakah operan adalah di register atau di memori; jika berada dalam memori, kemudian bidang dalam byte menentukan mode pengalamatan yang digunakan. ModR/m byte terdiri dari tiga bidang: Bidang Mod (2 bit) menggabungkan dengan r/m fields untuk membentuk 32 nilai yang mungkin: 8 register dan 24 mode pengindeksan, sedangkan Reg / opcode field (3 bit) menentukan register nomor atau lebih tiga bit informasi opcode; r / m field (3 bit) dapat menentukan mendaftarkan lokasi operand, atau merupakan bagian dari encoding-mode pengalamatan dalam kombinasi dengan Mod field.
y
SIB: pengkodean tertentu dari ModR / m byte menentukan masuknya byte SIB untuk menentukan sepenuhnya mode pengalamatan. SIB byte terdiri dari tiga bidang: Bidang Skala (2 bit) menentukan faktor skala untuk pengindeksan; Index (3 bit) menentukan indeks register; bidang Base (3 bit) menentukan base register.
y
Perpindahan:
ketika
specifier-mode
pengalamatan
menunjukkan
bahwa
perpindahan
yang
digunakan, 8 -, L6-, atau 32-bit masuk lapangan integer perpindahan ditambahkan. y
Immediate: Memberikan nilai 8 -, 16 -, atau 32-bit operan.
Ada beberapa perbandingan di sini. Dalam format x86, mode pengalamatan ini disediakan sebagai bagian dari urutan opcode dengan operan masing-masing. Karena hanya satu operan dapat memiliki informasi alamat-mode, hanya satu operan memori dapat dijadikan referensi dalam sebuah instruksi. Sebaliknya, VAX membawa informasi alamat-mode dengan operan masing-masing, yang memungkinkan operasi memori-ke-memori. Instruksi x86 itu lebih kompak. Namun, jika operasi memoriuntuk-memori yang dibutuhkan, VAX dapat mencapai hal ini dalam sebuah instruksi tunggal.
Format x86 memungkinkan penggunaan tidak hanya 1-byte, tapi juga 2-byte dan offset 4-byte untuk pengindeksan. Meskipun penggunaan hasil indeks offset lebih besar dalam instruksi lagi, fitur ini menyediakan fleksibilitas yang diperlukan. Sebagai contoh, sangat berguna dalam menangani besar array atau besar stack frames. Sebaliknya, IBM S/370 format instruksi memungkinkan offset tidak lebih besar dari 4K byte (12 bit informasi offset), dan offset harus positif. bila lokasi tidak dalam jangkauan offset, kompiler harus menghasilkan kode tambahan untuk menghasilkan alamat yang diperlukan. Masalah ikhususnya muncul dalam berurusan dengan stack frame yang memiliki variabel lokal menempati lebih dari 4K byte. Sebagai [DEWA90] katakan, "menghasilkan kode untuk 370 sangat menyakitkan sebagai akibat dari pembatasan yang yang ada bahkan telah kompiler untuk 370 yang hanya memilih untuk membatasi ukuran frame stack untuk 4K byte."
Keterangan gambar:
S = Untuk petunjuk pengolahan data, menandakan bahwa pembaruan kondisi kode instruksi S = Untuk load / store beberapa instruksi, menandakan apakah eksekusi instruksi resticted ke
modus
supervisor P, U, W = Bits yang membedakan antara berbagai jenis-mode pengalamatan B = Membedakan antara byte unsigned (B == 1) dan akses kata (B == 0) L = Untuk load / instruksi menyimpan, membedakan antara beban (L == l) dan Store (L == 0) L = Untuk instruksi cabang, menentukan apakah alamat pengirim disimpan dalam link rcgister
Seperti dapat dilihat, dengan pengkodean set instruksi x86 yang sangat kompleks. Hal ini dilakukan sebagian dengan harus kompatibel dengan mesin 8086 dan sebagian dengan keinginan pada bagian dari desainer untuk memberikan setiap bantuan yang memungkinkan kepada penulis compiler dalam memproduksi kode efisien. Ini adalah masalah dari beberapa perdebatan apakah set instruksi kompleks seperti ini adalah lebih baik ke ekstrim berlawanan dengan set instruksi RISC. Format Instruksi AR M
Semua instruksi dalam arsitektur ARM adalah 32 bit panjang dan mengikuti format biasa (gambar 11.10). Empat bit pertama dari instruksi adalah kode kondisi. Sebagaimana dijelaskan dalam bab 10, hampir semua instruksi ARM bisa kondisional dieksekusi. Tiga bit berikutnya menentukan jenis instruksi umum. Untuk petunjuk kebanyakan selain instruksi cabang, lima bit berikutnya merupakan suatu opcode dan / atau bit pengubah untuk operasi. 20 bit sisanya adalah untuk mengatasi operan. Struktur
reguler
format
instruksi
memudahkan
tugas
dari
unit
instruksi
decode.
IMMEDIATE CONSTANTS Untuk mencapai rentang yang lebih besar dari nilai langsung, format
pengolahan
data
langsung
menentukan
baik
nilai
langsung
dan
memutar
nilai.
Nilai immediate 8-bit diperluas untuk 32 bit dan kemudian diputar tepat oleh sejumlah bit sama dengan
dua
kali
memutar
4-bit
nilai.
beberapa
contoh
ditampilkan
pada
Gambar
11.11.
THUMB INSTRUKSI SET: Instruksi Thumb set adalah subset re-encoded dari set. Thumb instruksi ARM dirancang untuk meningkatkan kinerja implementasi ARM yang menggunakan 16-bit atau memory sempit bus data dan untuk memungkinkan kerapatan kode yang lebih baik daripada yang diberikan oleh ARM instruction set. Instruksi Thumb berisi subset dari instruksi 32-bit ARM mengatur recoded ke instruksi 16-bit. Penghematan ini dicapai dengan cara berikut: 1. Instruksi Thumb adalah tanpa syarat, sehingga kolom kode kondisi tidak digunakan. Juga, semua instruksi Thumb aritmetika dan logika update kondisi bendera, sehingga sedikit update-flag tidak diperlukan. Tabungan: 5 bit. 2. Thumb hanya memiliki subset dari operasi dalam set instruksi penuh dan hanya menggunakan bidang opcode 2-bit, ditambah bidang jenis 3-bit. Tabungan: 2 bit. 3. Sisa simpanan 9 bit berasal dari pengurangan dalam spesifikasi operan. Sebagai contoh, instruksi Thumb referensi saja register r0 melalui r7, jadi hanya 3 bit yang diperlukan untuk referensi register, bukan dari 4 bit. nilai langsung tidak termasuk 4-bit memutar field.
ARM prosesor dapat mengeksekusi program yang terdiri dari campuran instruksi Thumb dan instruksi ARM 32-bit. Sebuah bit pada register kontrol prosesor menentukan jenis instruksi saat sedang dijalankan. Gambar 11.12 menunjukkan kedua format umum dan contoh spesifik dari sebuah instruksi di kedua 16-bit dan 32-bit format.
11.5 Bahasa Asse mbly
Sebuah prosesor dapat memahami dan melaksanakan instruksi mesin. Seperti instruksi hanya bilangan biner yang dapat disimpan dalam komputer. Jika seorang programmer ingin program langsung dalam bahasa mesin, maka akan perlu untuk memasukkan program sebagai data biner. Pertimbangkan pernyataan sederhana DASAR N = I + J + K Misalkan kita ingin program ini membuat pernyataan dalam bahasa mesin dan untuk menginisialisasi I, J, dan K untuk 2, 3, 4. Program ini dimulai di lokasi 101 (heksadesimal). Memori disediakan untuk empat variabel dimulai di lokasi 201. Program ini terdiri dari empat instruksi: 1. Load isi lokasi 201 ke AC. 2. Tambahkan isi lokasi 202 ke AC. 3. Tambahkan isi lokasi 203 ke AC. 4. Menyimpan isi dari AC di lokasi 204. Ini jelas merupakan proses yang membosankan dan sangat rentan terhadap kesalahan. Sedikit perbaikan adalah menulis program dalam notasi heksadesimal daripada biner (gambar 10.11b). Kita bisa menulis program sebagai rangkaian garis.Setiap baris berisi alamat dari lokasi memori dan kode heksadesimal dari nilai bineruntuk disimpan di lokasi tersebut. Kemudian kita membutuhkan sebuah program yang akan menerima masukan ini, menerjemahkan setiap baris menjadi bilangan biner, dan menyimpannya di lokasi yang ditentukan.
View more...
Comments