2020
13.1 Addressing Modes
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.
b. Format Instruksi
Address field
Operand
b. Format Instruksi
Ø Operation Code, Register, Alamat memori
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.
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
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
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
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.
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.
(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.
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.
■ 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 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.
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.
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.