You are on page 1of 37

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

 Referensi operan dalam instruksi baik berisi nilai sebenarnya dari operan (langsung) atau
referensi ke alamat dari operan. Berbagai macam mode pengalamatan yang digunakan dalam
berbagai set instruksi. Ini termasuk secara langsung (alamat 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 pada set instruksi. Secara khusus, diperiksa jenis operan dan operasi
yang mungkin ditetapkan oleh instruksi mesin. Bab ini beralih ke pertanyaan tentang bagaimana untuk
menentukan operan dan operasi instruksi. Dua masalah timbul. Pertama, bagaimana alamat 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 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 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 X atau register X.

Tabel 11.1 menunjukkan perhitungan alamat untuk setiap mode pengalamatan.

Sebelum memulai diskusi ini, dua komentar dibuat. Pertama, hampir semua arsitektur komputer
menyediakan lebih dari salah satu mode pengalamatan. Pertanyaan muncul sebagai bagaimana dua
prosesor dapat menentukan alamat, mana modus yang digunakan dalam instruksi tertentu. Beberapa
pendekatan yang diambil. Seringkali, opkode berbeda akan menggunakan mode pengalamatan yang
berbeda. Juga, satu atau lebih bit dalam format instruksi dapat digunakan sebagai bidang mode. Nilai
bidang mode menentukan mode pengalamatan yang akan digunakan.

Kekhawatiran komentar kedua penafsiran alamat 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; bit paling kiri dari
bidang operan digunakan sebagai bit tanda. Ketika operan dimuat ke register data, bit tanda diperluas ke
kiri untuk ukuran word data penuh. Dalam beberapa kasus, nilai biner langsung ditafsirkan 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 instruksi. Kerugiannya adalah bahwa ukuran dari jumlah ini terbatas pada ukuran 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 membutuhkan satu referensi 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 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.

Register 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).

Register Indirect 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.

Displacement 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 iklan-

lapangan 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 per-

membentuk 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 CARA MENANGANI ARM

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 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.
o 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.
o 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.

Indeks 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 masing-
masing. Mode ini juga menyediakan pengindeksan yang efisien dari array dua dimensi ketika elemen
array adalah 2, 4, atau 8 byte panjangnya.

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. 

ARM 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 Offset: 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.
o 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
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.
o 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.

INSTRUKSI CABANG Mereka 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.

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 FORMAT 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 masing-
masing. 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 masing-
masing. 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 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.
o Kelengkapan: Setiap aritmatika tipe data (integer, fixed-point, floating-point) harus
memiliki dan identik set lengkap operasi.
o 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 PDP-11 dirancang untuk memberikan instruksi kuat dan fleksibel diatur dalam batasan suatu-bit
minicomputer 16 [BELL70].

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. Semua instruksi harus memiliki 'alami' jumlah dari operan.


2. 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 Assembler Notasi
Format dan Deskripsi

Opkode untuk RSB RSB


Kembali dari subroutine

Opcode untuk CLRL CLRL R9


Register 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 32-
Mode 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 ARM INSTRUCTION FORMATS

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:

 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.
 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.
 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.
 Perpindahan: ketika specifier-mode pengalamatan menunjukkan bahwa perpindahan yang
digunakan, 8 -, L6-, atau 32-bit masuk lapangan integer perpindahan ditambahkan.
 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 memori-
untuk-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 ARM

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 Assembly

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.
Untuk perbaikan lebih lanjut, kita dapat menggunakan nama simbolis atau mnemonicdari setiap instruksi.
Hal ini disebabkan karena program simbolik yang ditunjukkanpada gambar 10.11c. Masing-masing baris
masukan masih merupakan satu lokasimemori. Setiap baris terdiri dari tiga bidang, dipisahkan dengan
spasi. Kolom pertamaberisi alamat dari lokasi.
Untuk instruksinya, kolom kedua berisi tiga huruf simbol untuk opcode. Jika instruksi memori-referensi,
lalu ketiga diajukan berisi alamat. Untuk menyimpan data sewenang-wenang di lokasi, kami adakan
pseudoinstruction dengan simbol DAT. Ini hanyalahmerupakan indikasi bahwa bidang ketiga di baris
berisi angka heksadesimal untukdisimpan di lokasi yang ditentukan dalam kolom pertama.
Untuk jenis input kita membutuhkan sebuah program sedikit lebih kompleks. Programini menerima setiap
baris input, menghasilkan bilangan biner berdasarkan kolom kedua dan ketiga (jika ada), dan
menyimpannya di lokasi yang ditentukan dalam kolom pertama.
Penggunaan program simbolik membuat hidup jauh lebih mudah tetapi masihcanggung. Secara khusus,
kita harus memberikan alamat mutlak bagi setiap kata. Ini berarti bahwa program dan data dapat dimuat
ke dalam hanya satu tempat di memori,dan kita harus tahu tempat yang berada di depan waktu. Lebih
buruk lagi, misalkan kitaingin mengubah program suatu hari nanti dengan menambahkan atau
menghapusbaris. Ini akan mengubah alamat dari semua kata berikutnya.
Sebuah sistem yang jauh lebih baik, dan satu umum digunakan, adalah denganmenggunakan alamat
simbolis. Hal ini diilustrasikan dalam figure10.11d. Setiap barismasih terdiri dari tiga bidang. Bidang
pertama adalah masih untuk alamat, tetapi simboldigunakan sebagai ganti alamat numerik mutlak. Garis
Beberapa memiliki alamattidak, menyiratkan bahwa alamat garis yang satu lagi daripada alamat baris
sebelumnya. Untuk petunjuk memori-referensi, kolom ketiga juga berisi alamat simbolis.

Dengan ini perbaikan terakhir, kita memiliki bahasa assembly. Program yang ditulisdalam bahasa rakitan
diterjemahkan ke dalam bahasa mesin dengan assembler.Program ini tidak hanya harus melakukan
terjemahan simbolik dibahas sebelumnyatetapi juga menempatkan beberapa dari alamat memori ke
alamat simbolis.
Perkembangan bahasa assembly adalah tonggak utama dalam evolusi teknologi komputer. Ini adalah
langkah pertama untuk bahasa tingkat tinggi yang digunakan saat ini. Meskipun beberapa programmer
menggunakan bahasa assembly, hampir semuamesin menyediakan satu. Mereka digunakan, jika sama
sekali, untuk program-programsistem seperti compiler I / O rutinitas.
Lampiran B menyediakan pemeriksaan yang lebih rinci dari bahasa assembly.

You might also like