Anda di halaman 1dari 27

Instruction Sets:

Addressing Modes and Formats

Program Studi Teknik Informatika

Fakultas Ilmu Komputer

Universitas Esa Unggul

2020
13.1 Addressing Modes

Pengenalan Motode Pengalamatan

Motode pengalamatan adalah bagaimana cara menunjuk dan mengalamati suatu lokasi
memori pada sebuah alamat di mana operand akan diambil. Motode pengalamatan diterapkan
pada set instruksi, dimana pada umumnya instruksi terdiri dari opcode (kode operasi) dan alamat.
Setiap motode pengalamatan memberikan fleksibilitas khusus yang sangat penting. Mode
pengalamatan ini meliputi direct addressing, indirect addressing, dan immediate addressing.

A. Immediate Addresing(Pengalamatan Segera)


Mode pengalamatan immediate addressing sangat umum dipakai karena harga yang akan
disimpan dalam memori langsung mengikuti kode operasi dalam memori. Mode ini digunakan
saat suatu harga atau konstanta diketahui saat program dibuat dan tidak akan dirubah selama
eksekusi program. Operasi dengan mode ini membutuhkan dua byte instruksi, satu untuk kode
operasi dan satu lagi untuk data byte.
Dengan kata lain, tidak diperlukan pengambilan harga dari alamat lain untuk disimpan.
a. Kelebihan dan kekurangan dari Immedieate Addresing
NO KELEBIHAN KEKURANGAN CONTOH
1 Tidak adanya referensi Ukuran bilangan dibatasi ADD 7 ;
memori selain dari instruksi oleh ukuran field alamat tambahkan 7
yang diperlukan untuk pada akumulator
memperoleh operand
2 Menghemat siklus instruksi
3. sehingga proses keseluruhan
akan cepat

b. Format Instruksi
Address field
Operand

B. Direct Addressing (Pengalamatan Langsung)


Direct addressing merupakan mode pengalamatan untuk mentransfer data antar memori
dan register. Teknik ini banyak digunakan pada komputer lama dan komputer kecil. Hanya
memerlukan sebuah referensi memori dan tidak memerlukan kalkulus khusus. Demikian pula
akan lebih mudah menggunakan mode ini daripada mode immediate karena harga yang didapat
bisa dari lokasi memori yang mungkin variabel.
a. Kelebihan dan kekurangan dari Direct Addresing dan contoh
NO KELEBIHAN KEKURANGAN CONTOH
1 Field alamat berisi Keterbatasan field alamat ADD A ; tambahkan isi
efektif address karena panjang field alamat pada lokasi alamat A ke
sebuah operand biasanya lebih kecil akumulator
dibandingkan panjang word MOV A, 04H
04H Merupakan alamat
memori tempat data di
simpan atau di isikan

b. Format Instruksi
Ø Operation Code, Register, Alamat memori

C. Indirect Addressing (Pengalamatan tak langsung)


Mode pengalamatan indirect addressing sangat berguna karena dapat memberikan
fleksibilitas tinggi dalam mengalamati suatu harga. Mode ini pula satu-satunya cara untuk
mengakses 128 byte lebih dari RAM internal pada keluarga 8052.Field alamat mengacu pada
alamat word di alamat memori, yang pada gilirannya akan berisi alamat operand yang panjang

a. Kelebihan dan kekurangan dari Indirect Addresing dan contoh

NO KELEBIHAN KEKURANGAN CONTOH


1 Ruang bagi alamat Diperlukan referensi ADD (A) ; tambahkan isi
menjadi besar memori ganda dalam satu memori yang ditunjuk
sehingga semakin fetch sehingga oleh isi alamat A ke
banyak alamat memperlambat proses akumulator
yang dapat operasi
referensi

b. Format Instruksi
D. Register addressing (Pengalamatan Register)
Mode pengalamatan register mirip dengan mode pengalamatan langsung. Perbedaanya
terletak pada field alamat yang mengacu pada register, bukan pada memori utama. Field yang
mereferensi register memiliki panjang 3 atau 4 bit, sehingga dapat mereferensi 8 atau 16 register
general purpose. Pengalamatan antar register ini harus digunakan register yang berukuran sama,
seperti AL dan BH, CX dan AX.

a. Kelebihan dan kekurangan dari Indirect Addresing dan contoh


b.
NO KELEBIHAN KEKURANGAN CONTOH
1 Diperlukan field alamat Ruang alamat MOV AX,CX
berukuran kecil dalam menjadi terbatas MOV A, R4
instruksi dan tidak diperlukan Pindahkan isi Register
referensi memori R4 dan Akumulator
2 Akses ke register lebih cepat
daripada akses ke memori,
sehingga proses eksekusi
akan lebih cepat

b. Format Instruksi
E. Register indirect addressing (Pengalamatan tak-langsung register)
Mode pengalamatan register tidak langsung mirip dengan mode pengalamatan tidak
langsung. Perbedaannya adalah field alamat mengacu pada alamat register. Letak operand berada
pada memori yang dituju oleh isi register. Keuntungan dan keterbatasan pengalamatan register
tidak langsung pada dasarnya sama dengan pengalamatan tidak langsung. Keterbatasan field
alamat diatasi dengan pengaksesan memori yang tidak langsung sehingga alamat yang dapat
direferensi makin banyak. Dalam satu siklus pengambilan dan penyimpanan, mode
pengalamatan register tidak langsung hanya menggunakan satu referensi memori utama sehingga
lebih cepat daripada mode pengalamatan tidak langsung

a. Kelebihan dan kekurangan dari Register indirect Addresing dan contoh

NO KELEBIHAN KEKURANGAN CONTOH


1 Lebih flekibel Terlalu kompleks Intruksi : MOV A, @R0
} R0 merupakan alamat, yang digunakan
untuk menampung data yang akan
dikirim ke akumulator
} Jika R0 = 20H dan terdapat data 2FH di
alamat 20H maka perintah ini adalah
mengirimkan nilai 2FH ke akumulator

b. Format Instruksi
F. Displacement addressing
Menggabungkan kemampuan pengalamatan langsung dan pengalamatan register tidak
langsung. Mode ini mensyaratkan instruksi memiliki dua buah field alamat, sedikitnya sebuah
field yang eksplisit. Operand berada pada alamat A ditambahkan isi register.
Tiga model displacement
1. Relative addressing : register yang direferensi secara implisit adalah Program Counter (PC)
a. Alamat efektif didapatkan dari alamat instruksi saat itu ditambahkan ke field alamat
b. Memanfaatkan konsep lokalitas memori untuk menyediakan operand-operand berikutnya
2. Base register addressing : register yang direferensi berisi sebuah alamat memori dan field
alamat berisi perpindahan dari alamat itu
a. Referensi register dapat eksplisit maupun implisit
b. Memanfaatkan konsep lokalitas memori
3. Indexing : field alamat mereferensi alamat memori utama, dan register yang direferensikan
berisi pemindahan positif dari alamat tersebut
a. Merupakan kebalikan dari mode base register
b. Field alamat dianggap sebagai alamat memori dalam indexing
c. Manfaat penting dari indexing adalah untuk eksekusi program-pprogram iteratif
a. Kelebihan dan kekurangan dari Displacement addressing dan contoh

NO KELEBIHAN KEKURANGAN CONTOH


1 Lebih flekibel Terlalu kompleks Field eksplisit bernilai A dan field imlisit
mengarah pada register
b. Format Instruksi
Ø Field eksplisit bernilai A dan field imlisit mengarah pada register

G. Stack addressing
Stack adalah array lokasi yang linier = pushdown list = last-in-firs-out. Stack merupakan
blok lokasi yang terbaik. Btir ditambahkan ke puncak stack sehingga setiap blok akan terisi
secara parsial. Yang berkaitan dengan stack adalah pointer yang nilainya merupakan alamat
bagian paling atas stack. Dua elemen teratas stack dapat berada di dalam register CPU, yang
dalam hal ini stack pointer mereferensi ke elemen ketiga stack. Stack pointer tetap berada dalam
register. Dengan demikian, referensi-referensi ke lokasi stack di dalam memori pada dasarnya
merupakan pengalamatan register tidak langsung.
a. Kelebihan dan kekurangan dari Displacement addressing

NO KELEBIHAN KEKURANGAN
1 Ukuran instruksinya kecil Pemakaiannya terbatas

b. Format Instruksi
Format Instruksi

Operan terletak di puncak stack


Untuk pengkodean mode pengelamatan pada format insruksi dapat ditambahkan sebuah
field untuk mengkodekan pengelamatan
Format Instruksi
Opcode field Mode field Address field
13.2 x86 and ARM Addressing Modes
Mengingat mode dari Gambar 8.21

bahwa mekanisme x86 terjemahan alamat menghasilkan alamat yang disebut alamat virtual atau
efektif, yang offset ke segmen. Itu Jumlah alamat awal segmen dan alamat efektif menghasilkan
alamat linier. Jika paging digunakan, alamat linier ini harus melewati page translation sebuah
mekanisme untuk menghasilkan alamat fisik. Dalam apa yang berikut, kita mengabaikan
Langkah terakhir ini karena transparan ke set instruksi dan programmer.x86 ini dilengkapi
dengan berbagai mode pengalamatan dimaksudkan untuk memungkinkanpelaksanaan yang
efisien dari bahasa tingkat tinggi. Gambar 13.2 menunjukkan logika yang terlibat.
Segmen register menentukan segmen yang menjadi subjek dari referensi. Ada enam register
segmen; salah satu yang digunakan untuk referensi tertentu tergantung pada konteks pelaksanaan
dan instruksi. Setiap segmen daftar memegang indeks ke tabel segmen descriptor (Gambar
8.20), yang memegang mulai alamat dari segmen yang sesuai. Terkait dengan setiap user-terlihat
register segmen adalah segmen descriptor register (bukan programmer terlihat), yangmencatat
hak akses untuk segmen serta alamat awal dan batas(Panjang) segmen. Selain itu, ada dua
register yang dapat digunakan dalam membangun alamat: base register dan register indeks.Tabel
13.2 daftar x86 mode pengalamatan. Mari kita perhatikan masing-masing pada gilirannya.Untuk
modus langsung, operan termasuk dalam instruksi. Itu operan bisa menjadi byte, kata, atau
double word data.Untuk modus operand register, operan terletak di register. untuk umum
instruksi, seperti transfer data, aritmatika, dan instruksi logis, operan dapat menjadi salah satu
dari 32-bit register umum (EAX, 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 dari8-bit register umum (AH,
BH, CH, DH, AL, BL, CL, DL). Ada juga beberapa instruksi yang referensi register segmen
pemilih (CS, DS, ES, SS, FS, GS).Mode pengalamatan yang tersisa referensi lokasi di
memori. Ingatan lokasi harus ditentukan dalam hal segmen yang berisi lokasi dan offset dari
awal segmen. Dalam beberapa kasus, segmen ditentukan secara Tertentu pada orang lain,
segmen yang ditentukan oleh aturan sederhana yang menetapkan segmen secara default. Dalam
modus perpindahan, operan offset (alamat efektif dari Figure13.2) yang terkandung sebagai
bagian dari instruksi sebagai perpindahan 8-, 16-, atau 32-bit.Dengan segmentasi, semua alamat
dalam instruksi mengacu hanya untuk sebuahoffset dalam segmen. Modus menangani
pengungsian ditemukan pada beberapa mesin karena, seperti yang disebutkan sebelumnya, itu
mengarah ke petunjuk panjang. Dalam kasus x86,

nilai perpindahan dapat selama 32 bit, membuat untuk instruksi 6-byte.Perpindahan mengatasi
dapat berguna untuk referensi variabel global.Mode pengalamatan yang tersisa tidak langsung,
dalam arti bahwa alamatporsi instruksi memberitahu prosesor mana harus mencari untuk
menemukan alamat. The Base Mode menetapkan bahwa salah satu 8-, 16-, atau 32-bit register
berisi efektif alamat. Ini sama dengan apa yang telah kita disebut sebagai daftar langsung
menangani.
In the base with displacement mode, instruksi termasuk perpindahan yang akan ditambahkan
ke base register, yang mungkin salah satu register tujuan umum.Contoh penggunaan mode ini
adalah sebagai berikut:

• Digunakan oleh compiler untuk menunjuk ke awal area variabel lokal. Sebagai
contoh,base register bisa menunjukkan awal dari sebuah stack frame, yang berisivariabel
lokal untuk prosedur yang sesuai.

• Digunakan untuk indeks ke array ketika ukuran elemen tidak 1, 2, 4, atau 8 byte
danyang karenanya tidak dapat diindeks menggunakan indeks mendaftar. Dalam hal
ini,perpindahan menunjuk ke awal array, dan base register memeganghasil perhitungan
untuk menentukan offset untuk elemen tertentu dalamarray.

• Digunakan untuk mengakses lapangan dari rekor. Base register poin ke awalcatatan,
sedangkan perpindahan adalah offset ke lapangan.

Dalam indeks scaled index with displacement mode, instruksi termasuk perpindahanyang akan
ditambahkan ke register, dalam hal ini disebut indeks daftar. indeksdaftar mungkin salah satu
register tujuan umum kecuali satu yang disebut ESP,yang umumnya digunakan untuk
pengolahan stack. Dalam menghitung alamat efektif,Isi dari register indeks dikalikan dengan
faktor skala dari 1, 2, 4, atau 8, dankemudian ditambahkan ke perpindahan. Mode ini sangat
nyaman untuk array pengindeksan. SEBUAH skala faktor 2 dapat digunakan untuk berbagai 16-
bit bilangan bulat. Faktor skala dari 4dapat digunakan untuk 32-bit bilangan bulat atau angka
floating-point. Akhirnya, faktor skala dari8 dapat digunakan untuk berbagai angka floating-point
presisi ganda.

The base with index and displacement mode merangkum isi dasar kontent, register indeks, dan
perpindahan untuk membentuk alamat efektif. Lagi,base register dapat berupa tujuan umum
register dan register indeks dapatberupa general-purpose register kecuali ESP. Sebagai contoh,
mode pengalamatan inidapat digunakan untuk mengakses array lokal pada stack frame. Mode ini
juga dapatdigunakan untuk mendukung array dua dimensi; dalam kasus ini, perpindahan
menunjuk kemulai dari array, dan setiap register menangani satu dimensi dari array.
The based scaled index with displacement mode merangkum isi indeks dikalikan dengan
faktor skala, isi dari base register, dan perpindahan. Ini berguna jika array disimpan dalam stack
frame; dalam kasus ini, elemen arrayakan 2, 4, atau 8 byte setiap panjangnya. Mode ini juga
menyediakan pengindeksan efisien dariarray dua dimensi ketika elemen array adalah 2, 4, atau 8
byte panjangnya.

Finally, relative addressing dapat digunakan dalam transfer-of-control instruksi. Sebuah


perpindahan ditambahkan ke nilai dari program counter, yang menunjuk ke instruksi
berikutnya.Dalam hal ini, perpindahan diperlakukan sebagai ditandatangani byte, kata, atau
double word nilai, dan nilai yang baik meningkat atau menurun alamat dalam program counter.

ARM Addressing Modes

Biasanya mesin RISC, tidak seperti mesin CISC, menggunakan mode sederhana dan relatifset
langsung dari mode pengalamatan . Inimode yang paling mudah diklasifikasikan sehubungan
dengan jenis instruction.

load/store addressing load and store addressing adalah satu-satunya petunjuk memori
referensi. Hal ini selalu dilakukan secara tidak langsung melalui base register yang
mengimbangi. Ada tiga alternatif sehubungan dengan pengindeksan (Gambar 13.3):

•Offset: Untuk metode pengalamatan ini, pengindeksan tidak digunakan. Nilai offset adalah
ditambahkan ke atau dikurangi dari nilai dalam register basis untuk membentuk memori alamat.
Sebagai contoh Gambar 13.3a mengilustrasikan metode ini dengan perakitan instruksi bahasa
STRB r0, [r1, # 12]. Ini adalah instruksi byte toko.
Dalam hal ini alamat dasar dalam r1 mendaftar dan perpindahan adalahnilai langsung desimal
12. dihasilkan alamat (dasar ditambah offset) adalahlokasi di mana byte paling signifikan dari r0
adalah untuk disimpan.
• Preindex: Alamat memori terbentuk dengan cara yang sama seperti untuk mengimbangi
menangani.Alamat memori juga ditulis kembali ke base register. di lainkata, nilai base register
bertambah atau dikurangi dengan offsetnilai. Gambar 13.3b menggambarkan metode ini dengan
instruksi bahasa assemblySTRB r0, [r1, # 12] !. Tanda seru menandakan preindexing.
• Postindex: Alamat memori adalah nilai base register. Offset ditambahkan atau dikurangi dari
nilai base register dan hasilnya ditulis kembali ke base register. Gambar 13.3c menggambarkan
metode ini dengan bahasa assemblyinstruksi STRB r0, [r1], # 12.Perhatikan bahwa apa ARM
mengacu sebagai base register bertindak sebagai daftar indeks untukpreindex dan postindex
menangani. Nilai offset baik dapat menjadi segeranilai yang disimpan dalam instruksi atau dapat
di register lain. Jika nilai offsetdalam register, fitur lain yang berguna yang tersedia: skala
mendaftar menangani. Itunilai dalam register offset skala oleh salah satu operator pergeseran:
Logical Shift Kiri,Logis Kanan Shift, Aritmatika shift kanan, Putar Kanan, atau Putar Kanan
Diperpanjang(Termasuk carry bit dalam rotasi). Jumlah pergeseran ditentukan sebagainilai
langsung dalam instruksi.

data processing instruction addressing instruksi pemrosesan data menggunakanbaik mendaftar


menangani atau campuran mendaftar dan segera menangani. Untukmendaftar menangani, nilai di
salah satu operan daftar dapat ditingkatkan dengan menggunakansalah satu dari lima operator
pergeseran didefinisikan dalam paragraf sebelumnya.

branch instructions -satunya bentuk pengalamatan untuk instruksi cabangsegera


menangani. Instruksi cabang berisi nilai 24-bit. untuk alamatperhitungan, nilai ini bergeser ke
kiri 2 bit, sehingga alamat di batas kata.Jadi rentang alamat efektif adalah {32 MB dari program
counter.

load/store multiple addressing Beban Beberapa petunjuk memuat subset


(Mungkin semua) dari register tujuan umum dari memori. toko Beberapa
instruksi menyimpan subset (mungkin semua) dari tujuan umum register untuk
ingatan. Daftar register untuk beban atau toko ditentukan dalam bidang 16-bit di
instruksi dengan masing-masing bit sesuai dengan salah satu dari 16 register. Beban dan Toko
Beberapa mode pengalamatan menghasilkan berbagai berurutan dari alamat memori. Itu
termurah bernomor register disimpan di alamat memori terendah dan highest numbered
mendaftar di alamat memori tertinggi. Empat mode pengalamatan yang digunakan

(Gambar 13.4): kenaikan setelah, kenaikan sebelumnya, penurunan setelah, dan penurunan
sebelum. Sebuah base register menentukan alamat memori utama di mana daftar nilaidisimpan
dalam atau diambil dari dalam ascending (increment) atau turun (penurunan)lokasi
kata. Incrementing atau decrementing dimulai sebelum atau setelah yang pertamaakses
memori.Instruksi ini berguna untuk beban blok atau toko, operasi stack, danurutan prosedur
keluar.

13.3 INSTRUCTION FORMATS

Instruction Length

Masalah desain paling dasar yang harus dihadapi adalah format panjang instruksi.
Keputusan ini
mempengaruhi, dan dipengaruhi oleh, ukuran memori, organisasi memori, struktur bus, prosesor
kompleksitas, dan kecepatan prosesor. Keputusan ini menentukan kekayaan dan fleksibilitas
mesin seperti yang terlihat oleh programmer bahasa assembly. Pertukaran yang paling jelas di
sini adalah antara keinginan untuk instruksi yang kuat repertoar dan kebutuhan untuk menghemat
ruang. Programer menginginkan lebih banyak opcode, lebih banyak lagi operan, mode
pengalamatan yang lebih banyak, dan rentang alamat yang lebih besar. Lebih banyak opcode dan
operan yang lebih membuat hidup lebih mudah bagi programmer, karena program yang lebih
pendek bias ditulis untuk menyelesaikan tugas yang diberikan.

Demikian pula, mode pengalamatan yang lebih banyak memberikan programmer


fleksibilitas yang lebih besar dalam mengimplementasikan fungsi-fungsi tertentu, seperti
manipulasi table dan percabangan banyak arah. Dan, tentu saja, dengan peningkatan utama
ukuran memori dan meningkatnya penggunaan memori virtual, programmer ingin bisa untuk
mengatasi rentang memori yang lebih besar. Semua hal ini (opcode, operand, pengalamatan
mode, rentang alamat) membutuhkan bit dan mendorong ke arah instruksi yang lebih panjang
panjangnya. Tetapi panjang instruksi yang lebih panjang mungkin boros. Instruksi 64-bit
menempati
dua kali ruang dari instruksi 32-bit tetapi mungkin kurang dari dua kali berguna.

Di luar trade-off dasar ini, ada pertimbangan lain. Entah instruksi


panjang harus sama dengan panjang transfer memori (dalam sistem bus, databus
panjang) atau satu harus menjadi kelipatan dari yang lain. Kalau tidak, kami tidak akan
mendapatkannya
jumlah petunjuk yang tidak terpisahkan selama siklus pengambilan. Pertimbangan terkait adalah
kecepatan transfer memori. Tingkat ini belum mengikuti peningkatan prosesor kecepatan.
Dengan demikian, memori dapat menjadi hambatan jika prosesor dapat mengeksekusi instruksi
lebih cepat daripada dapat mengambilnya. Satu solusi untuk masalah ini adalah menggunakan
memori cache (lihat Bagian 4.3); lain adalah menggunakan instruksi yang lebih pendek. Jadi, 16-
bit instruksi dapat diambil pada dua kali laju instruksi 32-bit tetapi mungkin bisa dieksekusi
kurang dari dua kali lebih cepat.
Allocation of Bits
Kami telah melihat beberapa faktor yang masuk ke dalam menentukan panjangnya
instruksi format. Masalah yang sama sulitnya adalah bagaimana mengalokasikan bit dalam
format itu. Itu trade-off di sini rumit. Untuk panjang instruksi yang diberikan, jelas ada trade-off
antara nomor tersebut dari opcode dan kekuatan kemampuan pengalamatan. Lebih jelas tentu
saja opcode berarti lebih banyak bit di bidang opcode. Untuk format instruksi dari panjang yang
diberikan, ini mengurangi jumlah bit yang tersedia untuk pengalamatan. Ada satu yang menarik
penyempurnaan untuk trade-off ini, dan itu adalah penggunaan variabel-panjang opcode. Di
dalam pendekatan, ada panjang opcode minimum tetapi, untuk beberapa opcode, tambahan
operasi dapat ditentukan dengan menggunakan bit tambahan dalam instruksi. Untuk fixed length
instruksi, ini menyisakan sedikit bit untuk ditangani. Jadi, fitur ini digunakan ntuk instruksi yang
membutuhkan lebih sedikit operan dan / atau pengalamatan yang kurang kuat. Faktor-faktor
yang saling terkait berikut menentukan penggunaan pengalamatan bit.
■ Number of addressing modes: Terkadang mode pengalamatan dapat diindikasikan
secara implisit. Sebagai contoh, opcode tertentu mungkin selalu membutuhkan
pengindeksan. Dalam kasus lain, mode pengalamatan harus eksplisit, dan satu atau lebih mode
bit akan dibutuhkan.

■ Number of operands: Kami telah melihat bahwa semakin sedikit alamat yang dapat dibuat
lebih lama, program yang lebih canggung (misalnya, Gambar 12.3). Format instruksi yang khas
ada mesin-mesin masa kini termasuk dua operan. Setiap alamat operan dalam instruksi mungkin
membutuhkan indikator mode sendiri, atau penggunaan indikator mode bisa terbatas hanya pada
salah satu bidang alamat.

■ Register versus memory: Mesin harus memiliki register agar data bisa dibawa ke prosesor
untuk diproses. Dengan register satu pengguna-terlihat (Biasanya disebut akumulator), satu
alamat operand adalah implisit dan mengkonsumsi tidak ada instruksi bit. Namun, pemrograman
register tunggal aneh dan membutuhkan banyak instruksi. Bahkan dengan beberapa register,
hanya beberapa bit diperlukan untuk menentukan daftar. Semakin banyak register yang dapat
digunakan untuk referensi operand, semakin sedikit bit yang dibutuhkan. Sejumlah penelitian
menunjukkan bahwa total 8 hingga 32 register yang terlihat pengguna diinginkan [LUND77,
HUCK83].
Sebagian besar arsitektur kontemporer memiliki setidaknya 32 register.
■ Number of register sets: Kebanyakan mesin kontemporer memiliki satu set tujuan umum
register, dengan biasanya 32 atau lebih register di set. Register ini dapat digunakan untuk
menyimpan data dan dapat digunakan untuk menyimpan alamat untuk perpindahan berbicara.
Beberapa arsitektur, termasuk x86, memiliki koleksi dua atau lebih set khusus (seperti data dan
perpindahan). Satu keuntungan dari pendekatan yang terakhir ini adalah bahwa, untuk sejumlah
register yang tetap, suatu perpecahan fungsional membutuhkan lebih sedikit bit untuk digunakan
dalam instruksi. Misalnya, dengan dua set dari delapan register, hanya 3 bit yang diperlukan
untuk mengidentifikasi daftar; opcode atau mode register akan menentukan set register mana
yang direferensikan.

■ Address range: Untuk alamat yang mereferensikan memori, kisaran alamat yang bisa
direferensikan terkait dengan jumlah bit alamat. Karena ini membebankan batasan yang berat,
pengalamatan langsung jarang digunakan. Dengan perpindahan menangani, rentang dibuka
hingga panjang register alamat. Walaupun demikian, masih nyaman untuk memungkinkan
perpindahan besar dari alamat register,yang membutuhkan jumlah bit alamat yang relatif besar
dalam instruksi.
■ Address granularity: Untuk alamat yang merujuk memori daripada register, faktor lain
adalah perincian pengalamatan. Dalam sistem dengan Kata-kata 16 atau 32-bit, alamat dapat
merujuk kata atau byte ke perancang pilihan. Byte pengalamatan nyaman untuk manipulasi
karakter tetapi membutuhkan, untuk memori ukuran tetap, lebih banyak bit alamat.
13.4 x86 AND ARM INSTRUCTION FORMATS

x86 Instruction Formats

X86 dilengkapi dengan berbagai format instruksi. Dari elemen yang dijelaskan dalam sub
bagian ini, hanya bidang opcode selalu ada. Gambar 13.9 mengilustrasikan format instruksi
umum. Instruksi dibuat dari nol hingga empat opsional awalan instruksi, sebuah opcode 1- atau
2-byte, sebuah specifier alamat opsional (yang terdiri dari ModR / M byte dan Base Index Base
byte) perpindahan opsional, dan bidang langsung opsional.
Pertama mari kita perhatikan byte awalan:
■ Instruction prefixes: Awalan instruksi, jika ada, terdiri dari KUNCI awalan atau salah
satu awalan pengulangan. Awalan LOCK digunakan untuk memastikan eksklusif penggunaan
memori bersama dalam lingkungan multiprosesor. Prefiks berulang tentukan operasi berulang
dari string, yang memungkinkan x86 memproses string jauh lebih cepat daripada dengan peranti
lunak biasa. Ada lima pengulangan yang berbeda prefiks: REP, REPE, REPZ, REPNE, dan
REPNZ. Ketika REP mutlak awalan hadir, operasi yang ditentukan dalam instruksi dijalankan
berulang kali pada elemen berurutan dari string; jumlah pengulangan ditentukan dalam register
CX. Awalan REP bersyarat menyebabkan instruksi untuk mengulang hingga hitungan dalam CX
pergi ke nol atau sampai kondisi terpenuhi.
■ Segment override: Tentukan secara eksplisit segmen mana yang mendaftarkan instruksi harus
menggunakan, mengesampingkan pemilihan daftar segmen default yang dihasilkan oleh x86
untuk instruksi itu.
■ Operand size: Instruksi memiliki ukuran operand standar 16 atau 32 bit, dan awalan operand
beralih antara operand 32-bit dan 16-bit.
■ Address size: Prosesor dapat mengalamatkan memori menggunakan 16 - atau 32-bit alamat.
Ukuran alamat menentukan ukuran perpindahan dalam instruksi dan ukuran offset alamat yang
dihasilkan selama penghitungan alamat yang efektif. Salah satu ukuran ini ditetapkan sebagai
default, dan awalan ukuran alamat akan berubah antara generasi alamat 32-bit dan 16-bit.
Instruksi itu sendiri mencakup bidang-bidang berikut:
■ Opcode: Bidang opcode adalah 1, 2, atau 3 byte panjangnya. Opcode juga bisa termasuk bit
yang menentukan jika data adalah byte atau ukuran penuh (16 atau 32 bit tergantung pada
konteks), arah operasi data (ke atau dari memori), dan apakah suatu bidang data langsung harus
tanda diperpanjang.
■ ModR / M: Byte ini, dan yang berikutnya, memberikan informasi pengalamatan. Itu ModR /
M byte menentukan apakah operand dalam register atau dalam memori; jika itu dalam memori,
maka bidang dalam byte menentukan mode pengalamatan digunakan. ModR / M byte terdiri dari
tiga bidang: Bidang Mod (2 bit) menggabungkan dengan bidang R / M untuk membentuk 32
nilai yang mungkin: 8 register dan 24 mode pengindeksan; bidang Reg / Opcode (3 bit)
menentukan baik nomor register atau tiga bit informasi opcode; bidang R / M (3 bit) dapat
menentukan register sebagai lokasi operand, atau dapat membentuk bagian dari addressing mode
encoding dalam kombinasi dengan bidang Mod.
■ SIB: Enkode tertentu dari ModR / M byte menentukan penyertaan byte SIB untuk menentukan
sepenuhnya mode pengalamatan. SIB byte terdiri dari tiga bidang: The Bidang skala (2 bit)
menentukan faktor skala untuk pengindeksan skala; bidang Indeks (3 bit) menentukan daftar
indeks; bidang Base (3 bit) menentukan register basis.
■ Displacement: Ketika penunjuk mode pengarah menunjukkan bahwa perpindahan digunakan,
field perpindahan integer bertanda 8-, 16-, atau 32-bit bertanda ditambahkan.
■ Immediate: Memberikan nilai operand 8-, 16-, atau 32-bit. Beberapa perbandingan mungkin
berguna di sini. Dalam format x86, pengalamatan mode disediakan sebagai bagian dari urutan
opcode daripada dengan masing-masing operan.

Karena hanya satu operan yang dapat memiliki informasi alamat-mode, hanya satu
memori operan dapat direferensikan dalam sebuah instruksi. Sebaliknya, VAX membawa
informasi alamat-mode dengan setiap operan, memungkinkan memori-ke-memori operasi.
Instruksi x86 karena itu lebih kompak. Namun, jika a operasi memori-ke-memori diperlukan,
VAX dapat menyelesaikan ini dalam instruksi tunggal.
Format x86 memungkinkan penggunaan tidak hanya 1-byte, tetapi juga 2-byte dan 4-byte
offset untuk pengindeksan. Meskipun penggunaan hasil offset indeks yang lebih besar lebih lama
instruksi, fitur ini menyediakan fleksibilitas yang dibutuhkan. Misalnya, berguna dalam
menangani array besar atau tumpukan frame besar. Sebaliknya, instruksi IBM S / 370 format
memungkinkan offset tidak lebih besar dari 4 Kbytes (12 bit informasi offset), dan offset harus
positif. Ketika suatu lokasi tidak dalam jangkauan offset ini, maka compiler harus menghasilkan
kode tambahan untuk menghasilkan alamat yang diperlukan. Masalah ini terutama jelas dalam
berurusan dengan tumpukan frame yang memiliki variabel lokal yang menempati lebih dari 4
Kbytes. Seperti [DEWA90] katakan, “menghasilkan kode untuk 370 sangat menyakitkan sebagai
akibat dari pembatasan yang ada bahkan telah kompiler untuk 370 itu hanya memilih untuk
membatasi ukuran stack frame hingga 4 Kbytes. ” Seperti dapat dilihat, pengkodean set instruksi
x86 sangat kompleks. Ini harus dilakukan sebagian dengan kebutuhan untuk mundur kompatibel
dengan mesin 8086 dan sebagian dengan keinginan dari para desainer untuk menyediakan setiap
bantuan yang mungkin kepada penulis compiler dalam menghasilkan kode yang efisien. Ini
masalah perdebatan apakah suatu instruksi yang ditetapkan serumit ini lebih disukai daripada
ekstrem yang berlawanan dari set instruksi RISC.
rosesor ARM dapat menjalankan program yang terdiri dari campuran Thumb instruksi dan
instruksi ARM 32-bit. Sedikit dalam register kontrol prosesor menentukan jenis instruksi yang
sedang dieksekusi. Gambar 13.12 menunjukkan sebuah contoh. Gambar ini menunjukkan format
umum dan contoh spesifik dari suatu instruksi dalam format 16-bit dan 32-bit.

Dengan diperkenalkannya set instruksi Thumb, pengguna diminta untuk memadukan set
instruksi dengan mengkompilasi kinerja kritis kode ke ARM dan sisanya ke Thumb.
Pencampuran kode manual ini membutuhkan tambahan upaya dan sulit untuk mencapai hasil
yang optimal. Untuk mengatasi masalah ini, ARM mengembangkan set instruksi Thumb-2, yang
merupakan satu-satunya set instruksi tersedia pada produk mikrokontroler Cortex-M. Thumb-2
adalah peningkatan besar untuk arsitektur set instruksi Thumb (ISA). Ini memperkenalkan
instruksi 32-bit yang dapat dicampurkan secara bebas dengan 16-bit yang lebih tua Instruksi
jempol. Instruksi 32-bit baru ini mencakup hampir semua fungsi dari set instruksi ARM.
Perbedaan terpenting antara ISA Thumb dan ARM ISA adalah bahwa kebanyakan instruksi
Thumb 32-bit tidak bersyarat, sedangkan hampir semua instruksi ARM dapat bersyarat. Namun,
Thumb-2 memperkenalkan yang baru Instruksi If-Then (IT) yang memberikan banyak fungsi
bidang kondisi dalam instruksi ARM. Thumb-2 memberikan kerapatan kode keseluruhan yang
sebanding dengan Thumb, bersama dengan tingkat kinerja yang terkait dengan ISA ARM.
Sebelum Thumb-2, pengembang harus memilih antara Jempol untuk ukuran dan ARM untuk
kinerja. [ROBI07] melaporkan analisis set instruksi Thumb-2 yang dibandingkan dengan set
instruksi ARM dan set asli Thumb. Analisis ini melibatkan kompilasi dan mengeksekusi
Embedded Microprocessor Benchmark Consortium (EEMBC) benchmark suite menggunakan
tiga set instruksi, dengan hasil sebagai berikut:

■ Dengan kompilator yang dioptimalkan untuk kinerja, ukuran Thumb-2 26% lebih kecil
dari ARM, dan sedikit lebih besar dari Thumb asli.
■ Dengan kompilator yang dioptimalkan untuk ruang, ukuran Thumb-2 adalah 32% lebih kecil
dari ARM, dan sedikit lebih kecil dari Thumb asli.

■ Dengan kompiler yang dioptimalkan untuk kinerja, kinerja Thumb-2 pada benchmark suite
adalah 98% dari kinerja ARM dan 125% dari Thumb asli kinerja.
Hasil ini mengkonfirmasi bahwa Thumb-2 memenuhi tujuan desainnya. Gambar 13.13
menunjukkan bagaimana instruksi 32-bit Thumb yang baru dikodekan. Itu pengkodean
kompatibel dengan instruksi cabang tanpa kunci yang ada, yang memiliki pola bit 11100 dalam
lima bit paling kiri dari instruksi. Tidak ada yang lain Instruksi 16-bit dimulai dengan pola 111 di
tiga bit paling kiri, jadi bit
pola 11101, 11110, dan 11111 meunjukkan bahwa ini adalah instruksi Thumb 32-bit.

13.5 ASSEMBLY LANGUAGE

Prosesor dapat memahami dan mengeksekusi instruksi mesin. Instruksi semacam itu hanya
angka biner yang disimpan di komputer. Jika seorang programmer ingin memprogram langsung
dalam bahasa mesin, maka akan perlu untuk memasukkan program sebagai data biner.

Pertimbangkan pernyataan BASIC yang sederhana


N=I+J+K
Misalkan kita ingin memprogram pernyataan ini dalam bahasa mesin dan untuk menginisialisasi
Saya, J, dan K ke 2, 3, dan 4, masing-masing. Ini ditunjukkan pada Gambar 13.14a. Program
mulai di lokasi 101 (heksadesimal). Memori disediakan untuk empat variabel yang dimulai di
lokasi 201. Program ini terdiri dari empat instruksi
1. Load the contents of location 201 into the AC.
2. Add the contents of location 202 to the AC.
3. Add the contents of location 203 to the AC.
4. Store the contents of the AC in location 204.

Ini jelas merupakan proses yang sangat rawan dan sangat rawan kesalahan. Sedikit perbaikan
adalah penulis program dalam heksadesimal daripada biner notasi (Gambar 13.14b). Kita bisa
menulis program sebagai rangkaian garis.
Setiap baris berisi alamat lokasi memori dan kode heksadesimal biner nilai yang akan disimpan
di lokasi tersebut. Maka kita membutuhkan program yang akan menerima ini masukan,
terjemahkan setiap baris menjadi bilangan biner, dan simpan di lokasi yang ditentukan. Untuk
peningkatan lebih lanjut, kita dapat menggunakan nama simbolis atau mnemonic dari setiap
instruksi. Ini menghasilkan program simbolik yang ditunjukkan pada Gambar 13.14c. Setiap
garis input masih mewakili satu lokasi memori. Setiap baris terdiri dari tiga bidang, dipisahkan
oleh spasi. Kolom pertama berisi alamat lokasi. Untuk instruksi, kolom kedua berisi simbol tiga
huruf untuk opcode. Jika itu adalah instruksi referensi memori, maka bidang ketiga berisi alamat.

Untuk menyimpan data arbitrer di suatu lokasi, kami menciptakan pseudoinstruksi


dengan symbol DAT. Ini hanyalah sebuah indikasi bahwa field ketiga pada baris berisi a
bilangan heksadesimal untuk disimpan di lokasi yang ditentukan di bidang pertama. Untuk jenis
input ini kita memerlukan program yang sedikit lebih kompleks. Program menerima setiap baris
input, menghasilkan bilangan biner berdasarkan yang kedua dan ketiga (jika ada) bidang, dan
menyimpannya di lokasi yang ditentukan oleh bidang pertama. Penggunaan program simbolis
membuat hidup jauh lebih mudah tetapi masih canggung. Secara khusus, kita harus memberikan
alamat absolut untuk setiap kata. Ini berarti bahwa program dan data dapat dimuat ke hanya satu
tempat di memori, dan kita harus tahu tempat itu sebelumnya. Lebih buruk lagi, misalkan kita
ingin mengubah program suatu hari nanti dengan menambahkan atau menghapus garis. Ini akan
mengubah alamat dari semua kata berikutnya. Sistem yang jauh lebih baik, dan yang biasa
digunakan, adalah menggunakan alamat simbolik. Ini diilustrasikan pada Gambar 13.14d. Setiap
baris masih terdiri dari tiga bidang. Pertama bidang masih untuk alamat, tetapi simbol digunakan
sebagai pengganti angka absolut alamat. Beberapa baris tidak memiliki alamat, menyiratkan
bahwa alamat dari baris itu adalah satu lebih dari alamat baris sebelumnya. Untuk instruksi
referensi memori, kolom ketiga juga berisi alamat simbolis. Dengan penyempurnaan terakhir ini,
kita memiliki bahasa assembly. Program yang ditulis dalam bahasa assembly (program
perakitan) diterjemahkan ke bahasa mesin oleh sebuah assembler. Program ini tidak hanya harus
melakukan penerjemahan simbolis yang dibahas sebelumnya tetapi juga menetapkan beberapa
bentuk alamat memori ke alamat simbolik. Perkembangan bahasa assembly adalah tonggak
utama dalam evolusi teknologi komputer. Ini adalah langkah pertama ke bahasa tingkat tinggi
yang digunakan hari ini. Meskipun beberapa programmer menggunakan bahasa assembly,
hampir semua mesin berikan satu. Mereka digunakan, jika ada, untuk program sistem seperti
kompiler dan Rutinitas I / O. Lampiran B memberikan pemeriksaan bahasa assembly yang lebih
rinci.

Anda mungkin juga menyukai