Anda di halaman 1dari 46

P SENI F KAMI T DIA C entral

P rocessing U NIT

BAB

saya nstruction S ETS:


C haracteristics DAN F unctions
12.1 Karakteristik mesin Instruksi
Elemen Mesin Instruksi Instruksi
Perwakilan Jenis Instruksi Jumlah Alamat
Instruction Set Desain

12.2 Jenis Operan


Nomor Karakter
data logis

12.3 Intel x86 dan ARM Jenis Data


Jenis x86 data ARM
Tipe Data
12.4 Jenis Operasi
Transfer Data Arithmetic
Logical Konversi Input /
Output System Kontrol
Transfer Kontrol

12,5 Intel x86 dan ARM Jenis Operasi


Jenis x86 Operasi ARM
Jenis Operasi
12,6 direkomendasikan Reading

12,7 Syarat utama, Tinjau Pertanyaan, dan Masalah Lampiran 12A

sedikit-, besar-, dan Bi-Endian

405
406 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

L PRODUKTIF HAI TUJUAN


Setelah mempelajari bab ini, Anda harus dapat:

Hadir gambaran karakteristik penting dari instruksi mesin. Jelaskan jenis operan
digunakan dalam set instruksi mesin yang khas. Menyajikan ikhtisar dari x86 dan ARM
jenis data.
Jelaskan jenis operan didukung oleh set instruksi mesin yang khas. Menyajikan ikhtisar dari
x86 dan ARM jenis operasi.
Memahami perbedaan antara endian besar, little endian, dan bi-endian.

Banyak dari apa yang dibahas dalam buku ini tidak nampak kepada pengguna atau programmer komputer.
Jika seorang programmer menggunakan bahasa tingkat tinggi, seperti Pascal atau Ada, sangat sedikit dari
arsitektur mesin yang mendasari terlihat.
Salah satu batas di mana desainer komputer dan programmer komputer dapat melihat mesin
yang sama adalah mesin set instruksi. Dari titik desainer pandang, mesin set instruksi memberikan
persyaratan fungsional untuk prosesor: menerapkan prosesor adalah tugas yang sebagian besar
melibatkan menerapkan mesin set instruksi. Pengguna yang memilih untuk program dalam bahasa
mesin (sebenarnya, dalam bahasa assembly; lihat Lampiran B) menjadi sadar register dan memori
struktur, jenis data langsung didukung oleh mesin, dan fungsi ALU.

Sebuah deskripsi instruksi mesin komputer set pergi jauh ke arah menjelaskan prosesor
komputer. Dengan demikian, kita fokus pada instruksi mesin dalam bab ini dan berikutnya.

12.1 KARAKTERISTIK MESIN INSTRUKSI

Operasi prosesor ditentukan oleh petunjuk dijalankan, disebut sebagai instruksi mesin atau instruksi
komputer. Koleksi instruksi yang berbeda bahwa prosesor dapat mengeksekusi disebut sebagai
prosesor
set instruksi.

Elemen Instruksi Machine


Setiap instruksi harus berisi informasi yang diperlukan oleh prosesor untuk eksekusi. Gambar 12.1, yang mengulangi
Gambar 3.6, menunjukkan langkah-langkah yang terlibat dalam pelaksanaan instruksi dan, dengan implikasi,
mendefinisikan elemen dari instruksi mesin. Unsur-unsur ini adalah sebagai berikut:

kode operasi: Menentukan operasi yang akan dilakukan (misalnya, ADD, I / O). Operasi ini
ditentukan oleh kode biner, yang dikenal sebagai kode operasi, atau
opcode.

Sumber operan referensi: Operasi mungkin melibatkan satu atau lebih operan sumber, yaitu,
operan yang masukan untuk operasi.
12.1 KARAKTERISTIK INSTRUKSI / MESIN 407

Petunjuk operan toko


mengambil mengambil operan

beberapa beberapa
operan hasil

Perhitungan Instruksi Perhitungan Perhitungan


operasi
alamat pengoperasian alamat alamat
Data
instruksi decoding operan operan

Instruksi lengkap, mengambil Kembali untuk string atau


instruksi berikutnya data vektor

Gambar 12.1 Siklus Instruksi Diagram Negara

Hasil referensi operan: Operasi mungkin menghasilkan hasil.


Berikutnya instruksi referensi: Ini memberitahu prosesor mana untuk mengambil instruksi
berikutnya setelah pelaksanaan instruksi ini selesai. Alamat dari instruksi berikutnya yang akan
diambil dapat berupa alamat nyata atau alamat virtual, tergantung pada arsitektur. Umumnya,
perbedaan transparan untuk arsitektur set instruksi. Dalam kebanyakan kasus, instruksi berikutnya
yang akan diambil segera mengikuti instruksi saat ini. Dalam kasus tersebut, tidak ada referensi
eksplisit untuk instruksi berikutnya. Ketika referensi eksplisit diperlukan, maka memori utama atau
alamat virtual memory harus disediakan. Bentuk yang alamat yang disediakan dibahas dalam Bab 13.

Sumber dan hasilnya operan bisa berada di salah satu dari empat bidang:

Utama atau memori virtual: Seperti dengan referensi instruksi berikutnya, alamat memori utama atau
virtual harus disediakan.

Processor mendaftar: Dengan pengecualian langka, prosesor berisi satu atau lebih register yang dapat
direferensikan oleh instruksi mesin. Jika hanya satu mendaftar ada, referensi untuk itu mungkin implisit.
Jika lebih dari satu mendaftar ada, maka masing-masing mendaftar diberikan sebuah nama yang unik
atau nomor, dan instruksi harus berisi jumlah register yang diinginkan.

Segera: Nilai operan yang terkandung di lapangan dalam instruksi yang sedang dieksekusi.

I / O device: instruksi harus menentukan modul I / O dan perangkat untuk operasi. Jika
memori-dipetakan I / O digunakan, ini hanyalah alamat memori utama atau virtual.

instruksi Representasi
Dalam komputer, setiap instruksi diwakili oleh urutan bit. instruksi dibagi menjadi bidang, sesuai
dengan unsur-unsur pokok dari
408 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Bits 6 Bits 6 Bits

Opcode 4 16 Bits Operan referensi operan

referensi

Gambar 12.2 Sebuah Format Instruksi Sederhana

petunjuk. Sebuah contoh sederhana dari format instruksi ditunjukkan pada Gambar 12.2. Sebagai contoh
lain, IAS Format instruksi ditunjukkan pada Gambar 2.2. Dengan sebagian besar instruksi set, lebih dari
satu format yang digunakan. Selama eksekusi instruksi, instruksi dibaca ke dalam register instruksi (IR)
dalam prosesor. prosesor harus dapat mengekstrak data dari berbagai bidang instruksi untuk melakukan
operasi yang dibutuhkan.

Sulit untuk kedua programmer dan pembaca buku untuk berurusan dengan representasi biner
dari instruksi mesin. Dengan demikian, telah menjadi praktek umum untuk menggunakan representasi
simbolis instruksi mesin. Contoh ini digunakan untuk IAS set instruksi, pada Tabel 2.1.

Opcodes diwakili oleh singkatan, yang disebut ilmu tentang cara menghafal, yang menunjukkan operasi.
Contoh umum termasuk

MENAMBAHKAN Menambahkan

SUB Mengurangi

MUL Berkembang biak

DIV Membagi

BEBAN Beban data dari memori

STOR menyimpan data ke memori

Operan juga diwakili secara simbolis. Sebagai contoh, instruksi

ADD R, Y

mungkin berarti menambahkan nilai yang terkandung dalam data lokasi Y dengan isi mendaftar R. Dalam
contoh ini, Y mengacu pada alamat dari lokasi di memori, dan R mengacu pada sebuah register tertentu.
Perhatikan bahwa operasi dilakukan pada isi lokasi, bukan pada alamat.

Dengan demikian, adalah mungkin untuk menulis sebuah program bahasa mesin dalam bentuk simbolik.
Setiap opcode simbolik memiliki representasi biner tetap, dan programmer menentukan lokasi masing-masing
operan simbolik. Sebagai contoh, programmer mungkin mulai dengan daftar definisi:

X = 513 Y =

514

dan seterusnya. Sebuah program sederhana akan menerima input simbolik ini, mengkonversi opcodes dan referensi
operan ke bentuk biner, dan membangun instruksi mesin biner.
programmer mesin-bahasa yang langka ke titik ketiadaan. Kebanyakan program hari ini ditulis dalam
bahasa tingkat tinggi atau, gagal itu, bahasa assembly, yang dibahas dalam Lampiran B. Namun, bahasa mesin
simbolik tetap menjadi alat yang berguna untuk menggambarkan instruksi mesin, dan kami akan
menggunakannya untuk tujuan itu.
12.1 KARAKTERISTIK INSTRUKSI / MESIN 409

Jenis instruksi
Pertimbangkan instruksi bahasa tingkat tinggi yang bisa diungkapkan dalam bahasa seperti BASIC atau
FORTRAN. Sebagai contoh,

X=X+Y

Pernyataan ini menginstruksikan komputer untuk menambah nilai yang disimpan dalam Y untuk nilai yang
disimpan dalam X dan menempatkan hasil di X. Bagaimana mungkin ini dicapai dengan instruksi mesin? Mari
kita asumsikan bahwa variabel X dan Y sesuai dengan lokasi 513 dan 514. Jika kita mengasumsikan set
instruksi sederhana mesin, operasi ini dapat dicapai dengan tiga instruksi:

1. Memuat sebuah register dengan isi lokasi memori 513.


2. Menambahkan isi dari lokasi memori 514 untuk register.
3. Menyimpan isi dari register di lokasi memori 513.

Seperti dapat dilihat, instruksi DASAR tunggal mungkin membutuhkan tiga instruksi mesin. Ini adalah
khas dari hubungan antara bahasa tingkat tinggi dan bahasa mesin. Sebuah bahasa tingkat tinggi
mengungkapkan operasi dalam bentuk aljabar ringkas, menggunakan variabel. Sebuah bahasa mesin
mengungkapkan operasi dalam bentuk dasar yang melibatkan pergerakan data ke atau dari register.

Dengan contoh sederhana ini untuk membimbing kita, mari kita mempertimbangkan jenis instruksi yang harus
disertakan dalam komputer yang praktis. Sebuah komputer harus memiliki set instruksi yang memungkinkan pengguna
untuk merumuskan setiap tugas pengolahan data. Cara lain untuk melihatnya adalah dengan mempertimbangkan
kemampuan bahasa pemrograman tingkat tinggi. Setiap program yang ditulis dalam bahasa tingkat tinggi harus
diterjemahkan ke dalam bahasa mesin untuk dieksekusi. Dengan demikian, set instruksi mesin harus cukup untuk
mengekspresikan salah satu instruksi dari bahasa tingkat tinggi. Dengan pemikiran ini kita dapat mengkategorikan jenis
instruksi sebagai berikut:

Pengolahan data: instruksi aritmatika dan logika


Penyimpanan data: Pergerakan data masuk atau keluar dari register dan atau memori lokasi

Gerakan Data: I / O petunjuk


Kontrol: Test dan cabang instruksi

Hitung petunjuk menyediakan kemampuan komputasi untuk pengolahan data numerik. Logic ( Boolean)
instruksi beroperasi pada bit dari sebuah kata sebagai bit bukan sebagai angka; dengan demikian, mereka
memberikan kemampuan untuk memproses jenis lainnya data pengguna mungkin ingin mempekerjakan.
Operasi ini dilakukan terutama pada data dalam register prosesor. Oleh karena itu, harus ada ingatan instruksi
untuk memindahkan data antara memori dan register. I / O instruksi yang diperlukan untuk mentransfer program
dan data ke dalam memori dan hasil perhitungan kembali ke pengguna. Uji instruksi yang digunakan untuk
menguji nilai dari sebuah kata data atau status perhitungan a. instruksi cabang kemudian digunakan untuk
cabang untuk satu set instruksi yang berbeda tergantung pada keputusan yang dibuat.

Kami akan memeriksa berbagai jenis instruksi secara lebih rinci nanti dalam bab ini.
410 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Jumlah Alamat
Salah satu cara tradisional untuk menggambarkan arsitektur prosesor adalah dalam hal jumlah alamat yang
terkandung dalam setiap instruksi. Dimensi ini telah menjadi kurang signifikan dengan meningkatnya kompleksitas
desain prosesor. Namun demikian, hal ini berguna pada saat ini untuk menarik dan menganalisis perbedaan ini.

Berapa jumlah maksimum alamat yang mungkin perlu dalam instruksi? Terbukti, aritmatika dan
logika instruksi akan memerlukan paling operan. Hampir semua operasi aritmatika dan logika yang
baik unary (satu sumber operan) atau biner (dua sumber operan). Dengan demikian, kita akan
membutuhkan maksimal dua alamat untuk referensi operan sumber. Hasil operasi harus disimpan,
menunjukkan alamat ketiga, yang mendefinisikan operan tujuan. Akhirnya, setelah selesai instruksi,
instruksi berikutnya harus diambil, dan alamat yang dibutuhkan.

baris ini penalaran menunjukkan bahwa instruksi dapat masuk akal diminta untuk mengandung
empat referensi alamat: dua operan sumber, salah satu operan tujuan, dan alamat dari instruksi berikutnya.
Dalam kebanyakan arsitektur, sebagian besar instruksi memiliki satu, dua, atau tiga alamat operand,
dengan alamat dari instruksi berikutnya yang implisit (diperoleh dari program counter). Kebanyakan
arsitektur juga memiliki petunjuk tujuan khusus beberapa dengan lebih operan. Sebagai contoh, beban dan
menyimpan beberapa instruksi dari arsitektur ARM, dijelaskan pada Bab 13, menunjuk hingga 17 operan
mendaftar di sebuah instruksi.

Gambar 12.3 membandingkan petunjuk satu, dua, dan tiga-alamat yang khas yang dapat
digunakan untuk menghitung Y = (A - B)> [C + (D * E)]. Dengan tiga alamat, setiap instruksi menetapkan
dua lokasi operand sumber dan lokasi operan tujuan. Karena kita memilih untuk tidak mengubah nilai
salah satu lokasi operan, lokasi sementara, T, digunakan untuk menyimpan beberapa hasil antara.
Perhatikan bahwa ada empat instruksi dan bahwa ekspresi asli memiliki lima operan.

Petunjuk Komentar

SUB Y, A, BYAB MPY T, D, E


TDE
ADD T, T, C TTC
DIV Y, Y, TYYT

(A) petunjuk Tiga-alamat


Petunjuk Komentar

LOAD D AC D
MPY E AC AC E
Petunjuk Komentar
ADD C AC AC C
MOVE Y, A YA
STOR Y Y AC
SUB Y, B YYB
LOAD A AC A
PINDAHKAN T, D TD
SUB B AC AC B
MPY T, E TTE
DIV Y AC AC Y
ADD T, C TTC
STOR Y Y AC
DIV Y, T YYT

(B) instruksi Dua-alamat (C) instruksi Satu-alamat

Gambar 12.3 Program untuk Jalankan Y = A - B


C + (D * E)
12.1 KARAKTERISTIK INSTRUKSI / MESIN 411

format instruksi tiga alamat yang tidak umum karena mereka membutuhkan format instruksi yang
relatif lama untuk menahan tiga referensi alamat. Dengan instruksi twoaddress, dan untuk operasi biner, satu
alamat harus melakukan tugas ganda baik sebagai operan dan hasilnya. Dengan demikian, instruksi SUB Y,
B melakukan perhitungan Y - B dan menyimpan hasilnya di Y. Format dua alamat mengurangi kebutuhan
ruang tetapi juga memperkenalkan beberapa kejanggalan. Untuk menghindari mengubah nilai dari operan,
instruksi PINDAHKAN digunakan untuk memindahkan salah satu nilai ke hasil atau lokasi sementara sebelum
melakukan operasi. contoh program kami memperluas ke enam instruksi.

Sederhana namun adalah instruksi satu alamat. Untuk ini untuk bekerja, alamat kedua harus implisit.
Ini adalah umum di mesin sebelumnya, dengan alamat tersirat menjadi daftar prosesor yang dikenal sebagai akumulator
( AC). akumulator berisi salah satu operan dan digunakan untuk menyimpan hasilnya. Dalam contoh kita,
delapan instruksi yang diperlukan untuk menyelesaikan tugas.

Hal ini, pada kenyataannya, mungkin untuk membuat hubungannya dengan alamat nol untuk beberapa
petunjuk. petunjuk nol-alamat berlaku untuk organisasi memori khusus yang disebut tumpukan. Tumpukan
adalah terakhir-in-first-out set lokasi. Tumpukan di lokasi yang dikenal dan, sering, setidaknya atas dua elemen
dalam register prosesor. Dengan demikian, petunjuk nol-alamat akan referensi atas dua elemen stack.
Tumpukan dijelaskan dalam Lampiran O. Penggunaannya dieksplorasi lebih lanjut dalam bab ini dan dalam Bab
13.

Tabel 12.1 merangkum interpretasi untuk ditempatkan pada petunjuk dengan nol, satu, dua, atau
tiga alamat. Dalam setiap kasus dalam tabel, diasumsikan bahwa alamat dari instruksi berikutnya adalah
implisit, dan yang satu operasi dengan dua operan sumber dan satu hasil operan yang akan dilakukan.

Jumlah alamat per instruksi adalah keputusan desain dasar. Lebih sedikit alamat per hasil
instruksi dalam instruksi yang lebih primitif, membutuhkan prosesor kurang kompleks. Hal ini juga
menghasilkan instruksi panjang pendek. Di sisi lain, program berisi Total petunjuk lebih lanjut, yang
dalam hasil umum dalam waktu eksekusi lebih lama dan lebih lama, program yang lebih kompleks. Juga,
ada ambang batas penting antara instruksi satu-alamat dan multiple-alamat. Dengan instruksi
satu-alamat, programmer umumnya memiliki tersedia hanya satu tujuan umum register, akumulator.
Dengan instruksi multiple-alamat, itu adalah umum untuk memiliki beberapa register tujuan umum. Hal ini
memungkinkan beberapa operasi yang akan dilakukan

tabel 12.1 Pemanfaatan Alamat Instruksi (Instruksi Nonbranching)

Jumlah Alamat Representasi simbolik Interpretasi

3 OP A, B, C SEBUAH d B OP C

2 OP A, B SEBUAH d A OP B

1 OP A AC d AC OP A

0 OP T d ( T - 1) OP T

AC = akumulator T
= atas tumpukan (T - 1) = Unsur kedua
dari tumpukan
A, B, C = memori atau mendaftar lokasi
412 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

hanya pada register. Karena referensi mendaftar lebih cepat dari referensi memori, ini mempercepat eksekusi.
Untuk alasan fleksibilitas dan kemampuan untuk menggunakan beberapa register, kebanyakan mesin
kontemporer menggunakan campuran instruksi dua dan tiga alamat.

Desain trade-off yang terlibat dalam memilih jumlah alamat per instruksi yang rumit oleh faktor-faktor
lain. Ada masalah apakah alamat referensi lokasi memori atau register. Karena ada sedikit register, lebih
sedikit bit yang dibutuhkan untuk referensi mendaftar. Juga, seperti yang akan kita lihat di Bab 13, mesin
mungkin menawarkan berbagai mode pengalamatan, dan spesifikasi dari modus mengambil satu atau lebih
bit. Hasilnya adalah bahwa sebagian besar desain prosesor melibatkan berbagai format instruksi.

Instruksi Set Desain


Salah satu aspek yang paling menarik, dan paling dianalisis, desain komputer adalah set instruksi
desain. Desain set instruksi sangat kompleks karena mempengaruhi begitu banyak aspek dari sistem
komputer. Set instruksi mendefinisikan banyak fungsi yang dilakukan oleh prosesor dan tentunya
memiliki dampak yang signifikan terhadap pelaksanaan prosesor. Set instruksi adalah cara programmer
mengendalikan prosesor. Dengan demikian, persyaratan programmer harus dipertimbangkan dalam
merancang set instruksi.

Ini mungkin akan mengejutkan Anda untuk mengetahui bahwa beberapa masalah yang paling mendasar yang
berkaitan dengan desain set instruksi tetap dalam sengketa. Memang, dalam beberapa tahun terakhir, tingkat
ketidaksepakatan mengenai dasar-dasar ini telah benar-benar tumbuh. Yang paling penting dari isu-isu desain dasar
meliputi berikut ini:

repertoar operasi: Berapa banyak dan yang operasi untuk menyediakan, dan bagaimana kompleks
operasi harus

tipe data: Berbagai jenis data yang di atasnya operasi dilakukan


Format instruksi: panjang instruksi (dalam bit), jumlah alamat, ukuran berbagai bidang, dan
sebagainya
register: Jumlah register prosesor yang dapat direferensikan oleh instruksi, dan penggunaannya

mengatasi: Mode atau mode dimana alamat operan ditentukan

Isu-isu ini sangat saling terkait dan harus dipertimbangkan bersama-sama dalam merancang sebuah set instruksi.
Buku ini, tentu saja, harus mempertimbangkan mereka dalam beberapa urutan, tetapi dilakukan usaha untuk menunjukkan
hubungan timbal balik.
Karena pentingnya topik ini, banyak Bagian Tiga dikhususkan untuk desain set instruksi. Berikut
bagian ikhtisar ini, bab ini meneliti jenis data dan operasi repertoar. Bab 13 membahas mode
pengalamatan (yang mencakup pertimbangan register) dan format instruksi. Bab 15 mengkaji
berkurang set instruksi komputer (RISC). arsitektur RISC menimbulkan pertanyaan banyak keputusan
desain set instruksi tradisional dibuat di komputer komersial.
12.2 / JENIS operan 413

12.2 JENIS operan

instruksi mesin beroperasi pada data. Kategori umum yang paling penting dari data

Alamat
nomor
karakter
data logis

Kita akan melihat, dalam membahas mode pengalamatan pada Bab 13, bahwa alamat, pada
kenyataannya, bentuk data. Dalam banyak kasus, beberapa perhitungan harus dilakukan pada referensi
operand dalam instruksi untuk menentukan alamat memori utama atau virtual. Dalam konteks ini, alamat
dapat dianggap unsigned integer.
tipe data umum lainnya adalah angka, karakter, dan data logis, dan masing-masing diperiksa
secara singkat di bagian ini. Di luar itu, beberapa mesin mendefinisikan tipe data khusus atau struktur
data. Sebagai contoh, mungkin ada operasi mesin yang beroperasi langsung di daftar atau string
karakter.

nomor
Semua bahasa mesin termasuk tipe data numerik. Bahkan dalam pengolahan data nonnumeric, ada kebutuhan
untuk nomor untuk bertindak sebagai counter, lebar lapangan, dan sebagainya. Perbedaan penting antara nomor
yang digunakan dalam matematika biasa dan nomor yang tersimpan dalam komputer adalah bahwa yang terakhir
terbatas. Hal ini berlaku dalam dua pengertian. Pertama, ada batas untuk besarnya angka representable pada
mesin dan kedua, dalam kasus angka floating-point, batas untuk presisi mereka. Dengan demikian, programmer
dihadapkan dengan pemahaman konsekuensi dari pembulatan, meluap, dan underflow.

Tiga jenis data numerik yang umum di komputer:

bilangan bulat biner atau titik tetap biner


Biner floating point
Desimal

Kami memeriksa dua yang pertama dalam beberapa detail dalam Bab 10. Ini masih mengatakan beberapa kata tentang
angka desimal.
Meskipun semua operasi komputer internal biner di alam, para pengguna manusia dari sistem
kesepakatan dengan angka desimal. Dengan demikian, ada kebutuhan untuk mengkonversi dari desimal ke
biner pada masukan dan dari biner ke desimal pada output. Untuk aplikasi di mana ada banyak I / O dan relatif
sedikit, perhitungan relatif sederhana, adalah lebih baik untuk menyimpan dan beroperasi pada angka-angka
dalam bentuk desimal. representasi yang paling umum untuk tujuan ini adalah dikemas desimal. 1

1 Buku teks sering menyebut ini sebagai kode biner desimal (BCD). Tegasnya, BCD mengacu pada pengkodean setiap digit desimal dengan 4-bit
urutan yang unik. Dikemas desimal mengacu pada penyimpanan BCD- dikodekan digit menggunakan satu byte untuk masing-masing dua digit.
414 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Dengan desimal dikemas, setiap digit desimal diwakili oleh kode 4-bit, dalam cara yang jelas, dengan
dua digit disimpan per byte. Dengan demikian, 0 = 000, 1 = 0001, c, 8 = 1000, dan 9 = 1001. Catatan bahwa ini
adalah kode yang agak tidak efisien karena hanya 10 dari 16 kemungkinan nilai 4-bit yang digunakan. Untuk
membentuk angka, kode 4-bit yang dirangkai, biasanya dalam kelipatan 8 bit. Dengan demikian, kode untuk
246 0000 0010 0100 0110. Kode ini jelas kurang kompak dari representasi biner lurus, tetapi menghindari
overhead konversi. angka negatif dapat direpresentasikan dengan memasukkan 4-bit tanda digit di kedua ujung
kiri atau kanan dari string digit desimal dikemas. nilai tanda Standar 1100 untuk positif (+) dan 1101 untuk
negatif (-).

Banyak mesin memberikan petunjuk aritmatika untuk melakukan operasi langsung pada angka
desimal dikemas. Algoritma cukup mirip dengan yang dijelaskan dalam Bagian 9.3 tetapi harus
memperhitungkan desimal carry operasi.

karakter
Bentuk umum dari data teks atau karakter string. Sementara data tekstual yang paling nyaman bagi
manusia, mereka tidak bisa, dalam bentuk karakter, dengan mudah disimpan atau dikirimkan oleh
pengolahan data dan sistem komunikasi. Sistem tersebut dirancang untuk data biner. Dengan demikian,
sejumlah kode telah dirancang oleh yang karakter diwakili oleh urutan bit. Mungkin contoh umum paling
awal dari ini adalah kode Morse. Hari ini, kode karakter yang paling umum digunakan dalam Referensi
Alphabet Internasional (IRA), disebut di Amerika Serikat sebagai American Standard Kode untuk Informasi
Interchange (ASCII; lihat Lampiran F). Setiap karakter dalam kode ini diwakili oleh pola 7-bit yang unik;
dengan demikian, 128 karakter yang berbeda dapat diwakili. Ini adalah jumlah yang lebih besar daripada
yang diperlukan untuk mewakili karakter yang dapat dicetak, kontrol karakter. Beberapa karakter kontrol ini
harus dilakukan dengan mengendalikan pencetakan karakter pada halaman. Lainnya prihatin dengan
prosedur komunikasi. IRA-dikodekan karakter yang hampir selalu disimpan dan dikirim menggunakan 8 bit
per karakter. Bit kedelapan mungkin diatur ke 0 atau digunakan sebagai bit paritas untuk mendeteksi
kesalahan. Dalam kasus terakhir, bit diatur sedemikian rupa sehingga jumlah total 1s biner dalam setiap
oktet selalu ganjil (aneh paritas) atau selalu bahkan (paritas genap).

Catatan pada Tabel F.1 (Lampiran F) bahwa untuk bit pola IRA 011XXXX, angka 0 sampai 9
diwakili oleh setara biner mereka, 0000 melalui 1001, di paling kanan 4 bit. Ini adalah kode yang sama
seperti desimal dikemas. Ini memfasilitasi konversi antara 7-bit IRA dan 4-bit dikemas representasi
desimal.
kode lain yang digunakan untuk mengkodekan karakter adalah Diperpanjang Binary Coded
Decimal Interchange Code (EBCDIC). EBCDIC digunakan pada mainframe IBM. Ini adalah kode 8-bit.
Seperti IRA, EBCDIC kompatibel dengan desimal dikemas. Dalam kasus EBCDIC, kode 11110000
melalui 11111001 mewakili angka 0 sampai 9.

data yang logis

Biasanya, setiap kata atau unit beralamat lainnya (byte, sindiran, dan sebagainya) diperlakukan sebagai satu
kesatuan data. Hal ini kadang-kadang berguna, namun, untuk mempertimbangkan n bit unit sebagai terdiri dari n 1-bit
item data, setiap item memiliki nilai 0 atau 1. Bila data yang dilihat dengan cara ini, mereka dianggap logis data.
12.3 / INTEL x86 DAN ARM JENIS DATA 415

Ada dua keuntungan ke tampilan berorientasi bit. Pertama, kami terkadang ingin menyimpan array Boolean
atau item data biner, di mana setiap item dapat mengambil hanya nilai-nilai 1 (benar) dan 0 (false). Dengan data
logis, memori dapat digunakan paling efisien untuk penyimpanan ini. Kedua, ada kesempatan ketika kita ingin
memanipulasi bit item data. Sebagai contoh, jika operasi floating-point diimplementasikan dalam perangkat lunak,
kita harus mampu menggeser bit signifikan dalam beberapa operasi. Contoh lain: Untuk mengkonversi dari IRA ke
desimal dikemas, kita perlu mengekstrak paling kanan 4 bit dari setiap byte.

Perhatikan bahwa, dalam contoh sebelumnya, data yang sama diperlakukan kadang-kadang
sebagai logis dan lainnya kali numerik atau teks. Jenis dari unit data ditentukan oleh operasi yang
dilakukan di atasnya. Sementara ini biasanya tidak terjadi di bahasa tingkat tinggi, hampir selalu terjadi
dengan bahasa mesin.

12.3 INTEL x86 DAN ARM JENIS DATA

Jenis x86 data


x86 dapat menangani jenis data 8 (byte), 16 (kata), 32 (doubleword), 64 (quadword), dan 128 (double
quadword) bit panjangnya. Untuk memungkinkan fleksibilitas maksimum dalam struktur data dan
pemanfaatan memori efisien, kata-kata tidak perlu selaras pada alamat evennumbered; doublewords
tidak perlu selaras pada alamat dibagi secara merata 4; dan quadwords tidak perlu selaras pada
alamat dibagi secara merata 8; dan seterusnya. Namun, ketika data diakses di bus 32-bit, transfer data
berlangsung dalam satuan doublewords, dimulai pada alamat habis dibagi 4. Prosesor mengubah
permintaan untuk nilai-nilai sejajar menjadi urutan permintaan untuk transfer bus. Seperti dengan
semua mesin Intel 80x86, x86 menggunakan gaya little-endian; itu adalah,

Byte, kata, doubleword, quadword, dan quadword ganda disebut tipe data sebagai umum.
Selain itu, x86 mendukung jajaran tipe data tertentu yang diakui dan dioperasikan oleh petunjuk
tertentu. Tabel 12.2 merangkum jenis.

Gambar 12.4 menggambarkan x86 tipe data numerik. bilangan bulat menandatangani berada di
representasi berpasangan melengkapi dan mungkin 16, 32, atau 64 bit panjang. Jenis-ambang
sebenarnya mengacu pada satu set jenis yang digunakan oleh unit-ambang dan dioperasikan oleh
petunjuk-ambang. Tiga representasi floating-point sesuai dengan standar IEEE 754.

SIMD dikemas (single-instruksi-multiple-data) tipe data diperkenalkan pada arsitektur x86


sebagai bagian dari ekstensi dari set instruksi untuk mengoptimalkan kinerja aplikasi multimedia.
Ekstensi ini termasuk MMX (ekstensi multimedia) dan SSE (Streaming SIMD ekstensi). Konsep dasar
adalah bahwa beberapa operan yang dikemas ke dalam item memori tunggal direferensikan dan
bahwa beberapa operan dioperasikan secara paralel. Tipe data adalah sebagai berikut:

Dikemas byte dan dikemas byte integer: Byte dikemas ke dalam quadword 64-bit atau 128-bit quadword
ganda, diartikan sebagai bidang bit atau sebagai integer

kata dikemas dan dikemas kata integer: 16-bit kata-kata dikemas ke dalam quadword 64-bit atau 128-bit
quadword ganda, diartikan sebagai bidang bit atau sebagai integer
416 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

tabel 12.2 Jenis x86 data

Tipe data Deskripsi

Umum Byte, kata (16 bit), doubleword (32 bit), quadword (64 bit), dan quadword ganda
(128 bit) lokasi dengan isi biner sewenang-wenang.

Bilangan bulat Sebuah nilai biner ditandatangani terkandung dalam byte, kata, atau doubleword, menggunakan berpasangan

melengkapi representasi.

Urut Unsigned integer terkandung dalam byte, kata, atau doubleword.

Membongkar kode biner Sebuah representasi dari digit BCD di kisaran 0 sampai 9, dengan satu angka di setiap
desimal (BCD) byte.

dikemas BCD Dikemas byte representasi dari dua digit BCD; nilai di kisaran 0 sampai 99.

pointer dekat Sebuah 16-bit, 32-bit, atau 64-bit alamat efektif yang mewakili offset dalam segmen.
Digunakan untuk semua pointer dalam memori nonsegmented dan referensi dalam segmen
dalam memori tersegmentasi.

pointer jauh Sebuah alamat logis yang terdiri dari segmen pemilih 16-bit dan offset 16, 32, atau 64 bit.
pointer jauh digunakan untuk referensi memori dalam model memori tersegmentasi di
mana identitas segmen yang diakses harus ditentukan secara eksplisit.

bidang bit Sebuah urutan bersebelahan bit di mana posisi masing-masing bit dianggap sebagai unit
independen. Sebuah bit string dapat mulai pada setiap posisi bit dari byte apapun dan dapat
berisi hingga 32 bit.

bit string Sebuah urutan bersebelahan bit, yang berisi dari nol sampai 2 32 - 1 bit.

byte string yang Urutan bersebelahan byte, kata, atau doublewords, mengandung dari nol sampai 2 32 - 1
byte.

floating point Lihat Gambar 12.4.

Dikemas SIMD (single instruksi, Dikemas 64-bit dan 128-bit tipe data
beberapa data)

Dikemas doubleword dan dikemas bilangan bulat doubleword: 32-bit doublewords dikemas ke dalam
quadword 64-bit atau 128-bit quadword ganda, diartikan sebagai bidang bit atau sebagai integer

Dikemas quadword dan dikemas bilangan bulat qaudword: Dua quadwords 64-bit dikemas ke dalam
quadword ganda 128-bit, ditafsirkan sebagai bidang bit atau sebagai integer

Dikemas-ambang presisi tunggal dan dikemas floatingpoint presisi ganda: Empat 32-bit
floating-point atau dua 64-bit nilai floating-point dikemas ke dalam quadword ganda 128-bit

Jenis Data ARM


prosesor ARM mendukung tipe data 8 (byte), 16 (sindiran), dan 32 (kata) bit panjangnya. Biasanya,
akses sindiran harus sindiran selaras dan kata mengakses harus kata selaras. Untuk upaya akses
nonblok, arsitektur mendukung tiga alternatif.

kasus default:

- Alamat diperlakukan sebagai terpotong, dengan alamat bit [1: 0] diperlakukan sebagai nol untuk kata mengakses,
dan alamat bit [0] diperlakukan sebagai nol untuk sindiran mengakses.
12.3 / INTEL x86 DAN ARM JENIS DATA 417

Byte unsigned integer

Kata unsigned bilangan bulat

15 0

Doubleword unsigned integer

31 0

Quadword unsigned integer

63 0

comp berpasangan comp Byte integer ditandatangani

7 0

Berpasangan Kata unsigned bilangan bulat

15 0

berpasangan melengkapi Doubleword unsigned integer

31 0
point 0 7
berpasangan melengkapi Quadword unsigned integer

63 0
Masuk bit
presisi tunggal
Exp significand
floating point
31 0
Masuk bit
Ganda presisi
Exp significand
Floating point
63 51 0
Masuk bit bit Eksponen
Ganda presisi diperpanjang floating
Integer significand
79 63 0

Gambar 12.4 x86 Numeric Data Format

- Beban petunjuk ARM kata tunggal arsitektur didefinisikan untuk memutar kanan data
kata-blok ditransfer oleh alamat non kata-blok satu, dua, atau tiga byte tergantung pada nilai
dari dua alamat bit paling signifikan.

memeriksa keselarasan: Ketika bit kontrol yang tepat diatur, sinyal data yang membatalkan menunjukkan
kesalahan alignment untuk mencoba akses teralign.

akses teralign: Bila opsi ini diaktifkan, prosesor menggunakan satu atau lebih memori akses untuk
menghasilkan transfer yang dibutuhkan byte yang berdekatan transparan untuk programmer.

Untuk ketiga jenis data (byte, sindiran, dan kata) interpretasi unsigned didukung, di mana nilai
merupakan unsigned, bilangan bulat positif. Ketiga tipe data juga dapat digunakan untuk berpasangan
melengkapi bilangan bulat ditandatangani.
Mayoritas implementasi prosesor ARM tidak menyediakan hardware-ambang, yang menyimpan
kekuatan dan daerah. Jika aritmatika floating-point diperlukan dalam prosesor tersebut, harus
diimplementasikan dalam perangkat lunak. ARM tidak mendukung opsional floating-point coprocessor yang
mendukung tunggal dan double-presisi floating point tipe data yang didefinisikan dalam IEEE 754.
418 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

3)
alamat dari byte 0 byte
di memori (naik nilai
Byte 3 Data byte

byte 2

byte 1

byte 0

31 0 31 0

Byte 2 Byte 3 Byte 1 byte 0 Byte 0 Byte 1 Byte 2 Byte 3

ARM mendaftar ARM mendaftar

status program mendaftar E-bit = 0 status program mendaftar E-bit = 1

Gambar 12.5 ARM Endian Dukungan-Word Load / Store dengan E-Bit

endian MENDUKUNG Sedikit negara (E-bit) dalam sistem kontrol register diatur dan dibersihkan di bawah kontrol
program dengan menggunakan instruksi SETEND. E-bit mendefinisikan yang Endian untuk memuat dan
menyimpan data. Gambar 12.5 mengilustrasikan fungsi yang terkait dengan E-bit untuk beban kata atau toko
operasi. Mekanisme ini memungkinkan efisien dinamis data load / store untuk desainer sistem yang tahu mereka
perlu untuk mengakses struktur data dalam endianness berlawanan dengan mereka OS / lingkungan. Perhatikan
bahwa alamat setiap byte data tetap dalam memori. Namun, jalur byte di register berbeda.

12,4 JENIS OPERASI

Jumlah opcodes yang berbeda bervariasi dari mesin ke mesin. Namun, jenis umum yang sama operasi
ditemukan pada semua mesin. Sebuah kategorisasi yang berguna dan khas adalah sebagai berikut:

Transfer data
Hitung
Logis
Konversi
I/O

kontrol sistem
Transfer kontrol

Tabel 12.3 (berdasarkan [HAYE98]) daftar jenis instruksi umum dalam setiap kategori. Bagian ini
memberikan survei singkat dari berbagai jenis operasi, bersama-sama dengan diskusi singkat dari
tindakan yang diambil oleh prosesor untuk mengeksekusi suatu jenis operasi (diringkas dalam Tabel 12.4).
Topik terakhir ini diperiksa secara lebih rinci dalam Bab 14.
12.4 / JENIS OPERASI 419

tabel 12.3 Set Operasi Instruksi umum

Mengetik Nama operasi Deskripsi

Move (transfer) Mentransfer kata atau blok dari sumber ke tujuan

Toko Mentransfer kata dari prosesor ke memori

Beban (mengambil) Mentransfer kata dari memori ke prosesor

Bertukar Isi Swap dari sumber dan tujuan


Transfer data
Jelas (ulang) Kata transfer 0s ke tujuan

Set Kata transfer 1s ke tujuan

Dorong Mentransfer kata dari sumber ke atas tumpukan

pop Mentransfer kata dari atas tumpukan ke tujuan

Menambahkan sum menghitung dua operan

Mengurangi Perbedaan menghitung dua operan

Berkembang biak Produk menghitung dua operan

Membagi quotient menghitung dua operan


Hitung
Mutlak Ganti operan dengan nilai mutlak

Meniadakan Ubah tanda operan

Kenaikan Tambahkan 1 ke operand

Pengurangan Kurangi 1 dari operan

DAN Lakukan logis DAN

ATAU Lakukan logis OR

TIDAK (pelengkap) Lakukan logika NOT

Exclusive-OR Lakukan logis XOR

Uji Uji kondisi yang ditetapkan; set flag (s) berdasarkan pada hasil
Logis Membandingkan Membuat perbandingan logis atau aritmatika dari dua atau lebih operan; set
flag (s) berdasarkan pada hasil

Set Variabel Kontrol Kelas instruksi untuk mengatur kontrol untuk tujuan perlindungan,
penanganan interupsi, kontrol timer, dll

Bergeser Kiri (kanan) pergeseran operan, memperkenalkan konstanta di akhir

Memutar Kiri (kanan) pergeseran operan, dengan ujung sampul

Jump (cabang) Transfer tanpa syarat; beban PC dengan alamat tertentu

Langsung Bersyarat Uji kondisi yang ditetapkan; baik beban PC dengan alamat tertentu atau
melakukan apa-apa, berdasarkan kondisi

Langsung ke Subroutine Menempatkan informasi kontrol program saat ini di lokasi yang diketahui;
melompat ke alamat tertentu

Kembali Ganti isi PC dan register yang lain dari lokasi yang diketahui

Menjalankan Ambil operan dari lokasi yang ditentukan dan mengeksekusi sebagai instruksi;
tidak mengubah PC
Transfer kontrol
Melewatkan Kenaikan PC untuk melewatkan instruksi berikutnya

Loncat Bersyarat Uji kondisi yang ditetapkan; baik melewati atau melakukan apa-apa berdasarkan kondisi

Berhenti pelaksanaan program berhenti

Tunggu (ditahan) Menghentikan eksekusi program; uji yang ditentukan kondisi berulang kali;
melanjutkan eksekusi ketika kondisi puas

Tidak ada operasi Tidak ada operasi dilakukan, namun pelaksanaan program dilanjutkan

( terus)
420 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

tabel 12.3 terus-menerus

Mengetik Nama operasi Deskripsi

Input (baca) Transfer data dari yang ditentukan I / O port atau perangkat ke tujuan (misalnya, memori
utama atau prosesor register)

Output (write) Transfer data dari sumber tertentu ke I / O port atau perangkat
Input output
Mulai I / O Transfer instruksi untuk I / O prosesor untuk melakukan I / O operasi

Uji I / O informasi status transfer dari sistem I / O ke tujuan yang ditentukan

Menterjemahkan Menerjemahkan nilai-nilai di bagian memori berdasarkan tabel


korespondensi
Konversi
Mengubah Mengubah isi dari sebuah kata dari satu bentuk ke bentuk lainnya (misalnya,
dikemas desimal ke biner)

tabel 12.4 Processor Tindakan untuk Berbagai Jenis Operasi

Transfer data dari satu lokasi ke lokasi memori Jika


lain yang terlibat: Tentukan alamat memori

Transfer data
Lakukan virtual-to-aktual-memori transformasi alamat Daftar Cache
Memulai memori baca / tulis

Mungkin melibatkan transfer data, sebelum dan / atau setelah

Hitung Lakukan fungsi dalam ALU Set kode kondisi dan flag

Logis Sama seperti aritmatika

Mirip dengan aritmatika dan logis. Mungkin melibatkan logika khusus untuk melakukan konversi
Konversi

program update counter. Untuk subroutine panggilan / kembali, mengelola parameter passing dan
Transfer kontrol
linkage

Masalah perintah untuk modul I / O


I/O
Jika memori-dipetakan I / O, menentukan alamat memori-dipetakan

Transfer data
Jenis yang paling mendasar dari instruksi mesin adalah instruksi transfer data. Transfer instruksi data
harus menentukan beberapa hal. Pertama, lokasi sumber dan tujuan operan harus ditentukan. Setiap
lokasi bisa menjadi memori, register, atau bagian atas tumpukan. Kedua, panjang data yang akan
ditransfer harus ditunjukkan. Ketiga, seperti dengan semua instruksi dengan operan, mode
pengalamatan untuk setiap operan harus ditentukan. Poin terakhir ini dibahas dalam Bab 13.

Pilihan instruksi transfer data untuk memasukkan dalam set instruksi mencontohkan jenis
trade-off desainer harus membuat. Misalnya, lokasi umum (memori atau register) dari operan dapat
diindikasikan baik dalam spesifikasi opcode atau operan. Tabel 12.5 menunjukkan contoh yang paling
umum IBM EAS / 390 instruksi transfer data. Perhatikan bahwa ada varian untuk menunjukkan
12.4 / JENIS OPERASI 421

tabel 12.5 Contoh IBM EAS / 390 Transfer Data Operasi

operasi Jumlah Bits


Mnemonic Nama Ditransfer Deskripsi

L Beban 32 Transfer dari memori untuk mendaftar

LH memuat sindiran 16 Transfer dari memori untuk mendaftar

LR Beban 32 Transfer dari register untuk mendaftar

LER Beban (pendek) 32 Transfer dari floating-point register floating-point


mendaftar

LE Beban (pendek) 32 Mentransfer dari memori ke floating-point mendaftar

LDR Beban (panjang) 64 Transfer dari floating-point register floating-point


mendaftar

LD Beban (panjang) 64 Mentransfer dari memori ke floating-point mendaftar

ST Toko 32 Mentransfer dari register ke memori

STH toko sindiran 16 Mentransfer dari register ke memori

STC toko Karakter 8 Mentransfer dari register ke memori

STE Store (pendek) 32 Transfer dari floating-point mendaftar ke memori

STD Store (panjang) 64 Transfer dari floating-point mendaftar ke memori

jumlah data yang akan ditransfer (8, 16, 32, atau 64 bit). Juga, ada petunjuk yang berbeda untuk mendaftar untuk
mendaftar, daftar ke memori, memori untuk mendaftar, dan memori untuk transfer memori. Sebaliknya, VAX
memiliki langkah (MOV) instruksi dengan varian untuk jumlah yang berbeda dari data yang akan dipindahkan,
tetapi menentukan apakah suatu operan adalah mendaftar atau memori sebagai bagian dari operan. VAX
Pendekatan agak lebih mudah untuk programmer, yang memiliki mnemonik lebih sedikit untuk menangani.
Namun, hal ini juga agak kurang kompak dari IBM EAS / 390 pendekatan karena lokasi (mendaftar dibandingkan
memori) dari setiap operan harus ditentukan secara terpisah dalam instruksi. Kami akan kembali ke perbedaan ini
ketika kita membahas format instruksi pada Bab 13.

Dalam hal tindakan prosesor, operasi transfer data mungkin adalah jenis yang paling sederhana. Jika
kedua sumber dan tujuan yang register, maka prosesor hanya menyebabkan data yang akan ditransfer dari satu
mendaftar ke yang lain; ini adalah operasi internal untuk prosesor. Jika salah satu atau kedua operan dalam
memori, maka prosesor harus melakukan beberapa atau semua tindakan berikut:

1. Hitung alamat memori, berdasarkan modus alamat (dibahas di


Bab 13).
2. Jika alamat mengacu pada memori virtual, menerjemahkan dari virtual ke memori nyata
alamat.
3. Tentukan apakah item dibenahi adalah dalam cache.

4. Jika tidak, mengeluarkan perintah ke modul memori.


422 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Hitung
Kebanyakan mesin menyediakan operasi aritmatika dasar menambah, mengurangi, mengalikan, dan
membagi. Ini selalu disediakan untuk integer ditandatangani (fixed-point) nomor. Seringkali mereka juga
disediakan untuk floating-point dan angka desimal dikemas.

Operasi lain yang mungkin termasuk berbagai instruksi single-operan; sebagai contoh,

Mutlak: Mengambil nilai absolut dari operan.


Meniadakan: Meniadakan operan.
Kenaikan: Tambahkan 1 ke operan.
Pengurangan: Kurangi 1 dari operan.

Pelaksanaan instruksi aritmatika mungkin melibatkan operasi transfer data ke posisi operan
untuk input ke ALU, dan untuk memberikan output dari ALU. Gambar 3.5 menggambarkan gerakan
yang terlibat dalam transfer data dan operasi aritmatika. Selain itu, tentu saja, bagian ALU prosesor
melakukan operasi yang diinginkan.

Logis
Kebanyakan mesin juga menyediakan berbagai operasi untuk memanipulasi bit individual dari sebuah kata atau
unit beralamat lain, sering disebut sebagai sedikit memutar-mutar. Mereka didasarkan pada operasi Boolean
(lihat Bab 11).
Beberapa operasi logis dasar yang dapat dilakukan pada Boolean atau data biner ditunjukkan
pada Tabel 12.6. TIDAK operasi membalikkan sedikit. AND, OR, dan Eksklusif-OR (XOR) adalah fungsi
logis yang paling umum dengan dua operan. EQUAL adalah tes biner yang berguna.

Ini operasi logis dapat diterapkan bitwise untuk n bit unit data logis. Jadi, jika dua register berisi
data

(R1) = 10.100.101 (R2) =

00.001.111

kemudian

(R1) DAN (R2) = 00.000.101

tabel 12.6 Operasi Logical dasar

P Q TIDAK P P DAN Q P OR Q P XOR Q PQ

0 0 1 0 0 0 1

0 1 1 0 1 1 0

1 0 0 0 1 1 0

1 1 0 1 1 0 1
12.4 / JENIS OPERASI 423

dimana notasi (X) berarti isi dari lokasi X. Dengan demikian, operasi AND dapat digunakan sebagai topeng yang
memilih bit tertentu dalam kata dan angka nol keluar bit yang tersisa. Sebagai contoh lain, jika dua register
mengandung

(R1) = 10.100.101 (R2)

= 11111111

kemudian

(R1) XOR (R2) = 01.011.010

Dengan satu kata diatur ke semua 1s, operasi XOR membalikkan semua bit dalam kata lain (yang
melengkapi).
Selain bitwise operasi logis, kebanyakan mesin menyediakan berbagai pergeseran dan fungsi berputar.
Operasi yang paling dasar diilustrasikan pada Gambar 12.6. Dengan pergeseran logis, bit dari sebuah kata yang
bergeser kiri atau kanan. Pada salah satu ujung, sedikit bergeser keluar hilang. Pada ujung yang lain, sebuah 0
digeser di. Shift Logical berguna terutama untuk mengisolasi bidang dalam kata. 0s yang bergeser menjadi sebuah
kata menggantikan informasi yang tidak diinginkan yang digeser dari ujung lainnya.

(A) shift kanan Logical

(B) pergeseran kiri Logical

shift kanan (c) Aritmatika

(D) Aritmatika meninggalkan pergeseran

(E) Hak rotate

(F) Kiri memutar

Gambar 12.6 Bergeser dan Putar Operasi


424 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Sebagai contoh, misalkan kita ingin mengirimkan karakter data ke I / O device 1 karakter pada satu
waktu. Jika setiap kata memori adalah 16 bit panjang dan berisi dua karakter, kita harus membongkar karakter
sebelum mereka dapat dikirim. Untuk mengirim dua karakter dalam kata,

1. Memuat kata ke dalam register.

2. Bergeser ke kanan delapan kali. Ini menggeser karakter yang tersisa ke kanan
setengah dari register.

3. Lakukan I / O. Modul I / O membaca lebih rendah-order 8 bit dari bus data. Langkah-langkah sebelumnya

mengakibatkan mengirimkan karakter kiri. Untuk mengirim karakter sebelah kanan,

1. Memuat kata lagi ke register.


2. DAN dengan 0000000011111111. ini masker keluar karakter di sebelah kiri.

3. Lakukan I / O.

Itu pergeseran aritmatika operasi memperlakukan data sebagai integer ditandatangani dan tidak menggeser
bit tanda. Pada pergeseran aritmatika yang tepat, bit tanda direplikasi ke posisi bit ke kanan. Pada pergeseran
aritmatika kiri, pergeseran kiri yang logis dilakukan pada semua bit tapi sedikit tanda, yang dipertahankan. Operasi ini
dapat mempercepat operasi aritmatika tertentu. Dengan angka dalam berpasangan melengkapi notasi, pergeseran
aritmatika yang tepat sesuai dengan pembagian dengan 2, dengan pemotongan untuk angka ganjil. Kedua
pergeseran aritmatika kiri dan pergeseran kiri yang logis sesuai dengan perkalian dengan 2 ketika tidak ada
melimpah. Jika overflow terjadi, aritmatika dan operasi pergeseran meninggalkan logis menghasilkan hasil yang
berbeda, tetapi aritmatika meninggalkan pergeseran mempertahankan tanda nomor. Karena potensi overflow, banyak
prosesor tidak termasuk instruksi ini, termasuk PowerPC dan Itanium. Lainnya, seperti IBM EAS / 390, menawarkan
instruksi. Anehnya, arsitektur x86 termasuk aritmatika meninggalkan pergeseran tapi mendefinisikan itu menjadi
identik dengan pergeseran kiri yang logis.

Memutar, atau pergeseran siklik, operasi melestarikan semua bit yang dioperasi. Salah satu penggunaan rotate
adalah untuk membawa setiap bit berturut-turut ke dalam bit paling kiri, di mana ia dapat diidentifikasi dengan menguji tanda
data (diperlakukan sebagai angka).
Seperti operasi aritmatika, operasi logika melibatkan aktivitas ALU dan mungkin melibatkan
operasi transfer data. Tabel 12.7 memberikan contoh semua shift dan operasi rotate dibahas dalam
ayat ini.

tabel 12.7 Contoh Shift dan Putar Operasi

Memasukkan Operasi Hasil

10100110 Logis shift kanan (3 bit) 00010100

10100110 Logis meninggalkan shift (3 bit) 00110000

10100110 Aritmatika shift kanan (3 bit) 11110100

10100110 Aritmatika meninggalkan shift (3 bit) 10110000

10100110 memutar Kanan (3 bit) 11010100

10100110 Meninggalkan rotate (3 bit) 00110101


12.4 / JENIS OPERASI 425

Konversi
petunjuk konversi adalah mereka yang mengubah format atau beroperasi pada format data. Contohnya adalah
mengkonversi dari desimal ke biner. Contoh dari instruksi editing yang lebih kompleks adalah EAS / 390
Terjemahkan (TR) instruksi. Instruksi ini dapat digunakan untuk mengkonversi dari satu 8-bit kode ke yang lain,
dan dibutuhkan tiga operan:

TR R1 (L), R2

operan R2 berisi alamat awal tabel kode 8-bit. Byte L mulai alamat yang ditentukan dalam R1
dijabarkan, setiap byte digantikan oleh isi dari entri tabel diindeks oleh byte itu. Misalnya, untuk
menerjemahkan dari EBCDIC ke IRA, pertama kita membuat tabel 256-byte di lokasi penyimpanan,
katakanlah, 1000-10FF heksadesimal. tabel berisi karakter dari kode IRA di urutan representasi biner
dari kode EBCDIC; yaitu, kode IRA ditempatkan dalam tabel di lokasi relatif sama dengan nilai biner
dari kode EBCDIC dari karakter yang sama. Dengan demikian, lokasi 10F0 melalui 10F9 akan berisi
nilai-nilai 30 melalui 39, karena F0 adalah kode EBCDIC untuk digit 0, dan 30 adalah kode IRA untuk
digit 0, dan sebagainya melalui digit 9. Sekarang anggaplah kita memiliki EBCDIC untuk angka 1984
mulai pukul lokasi 2100 dan kami ingin menerjemahkan ke IRA. Asumsikan berikut:

Lokasi 2100-2103 mengandung F1 F9 F8 F4.


R1 mengandung 2100.

R2 mengandung 1000.

Kemudian, jika kita mengeksekusi

TR R1 (4), R2

lokasi 2100-2103 akan berisi 31 39 38 34.

Input output
instruksi input / output yang dibahas secara rinci dalam Bab 7. Seperti yang kita lihat, ada berbagai
pendekatan yang diambil, termasuk terisolasi diprogram I / O, memori-dipetakan diprogram I / O, DMA, dan
penggunaan I / O prosesor. Banyak implementasi hanya memberikan beberapa instruksi I / O, dengan
tindakan tertentu yang ditentukan oleh parameter, kode, atau kata-kata perintah.

sistem Kontrol
instruksi kontrol sistem adalah mereka yang dapat dijalankan hanya sementara prosesor ini dalam keadaan
istimewa tertentu atau mengeksekusi program di daerah istimewa khusus dari memori. Biasanya, instruksi
ini dicadangkan untuk penggunaan sistem operasi.

Beberapa contoh operasi sistem kontrol adalah sebagai berikut. Sebuah instruksi sistem kontrol dapat
membaca atau mengubah kontrol register; kita membahas register kontrol dalam Bab 14. Contoh lain adalah
instruksi untuk membaca atau memodifikasi kunci perlindungan penyimpanan, seperti yang digunakan dalam sistem
memori EAS / 390. Contoh lain adalah akses ke blok kontrol proses dalam sistem multiprogramming.
426 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Transfer Kontrol
Untuk semua jenis operasi dibahas sejauh ini, instruksi berikutnya yang akan dilakukan adalah salah satu
yang segera mengikuti, dalam memori, instruksi saat. Namun, fraksi yang signifikan dari instruksi dalam
program apapun miliki sebagai fungsi mereka mengubah urutan eksekusi instruksi. Untuk petunjuk ini,
operasi yang dilakukan oleh prosesor adalah untuk memperbarui program counter mengandung alamat
dari beberapa instruksi dalam memori.

Ada sejumlah alasan mengapa perpindahan-of-control operasi diperlukan. Di antara yang paling
penting adalah sebagai berikut:

1. Dalam penggunaan praktis komputer, adalah penting untuk dapat melaksanakan setiap
instruksi lebih dari sekali dan mungkin ribuan kali. Ini mungkin memerlukan ribuan atau mungkin
jutaan instruksi untuk mengimplementasikan aplikasi. Ini akan terpikirkan jika setiap instruksi
harus ditulis secara terpisah. Jika meja atau daftar item yang akan diproses, loop program yang
diperlukan. Satu urutan instruksi dieksekusi berulang kali untuk memproses semua data.

2. Hampir semua program melibatkan beberapa pengambilan keputusan. Kami ingin com-
puter untuk melakukan satu hal jika salah satu kondisi memegang, dan hal lain jika kondisi lain
memegang. Sebagai contoh, urutan instruksi menghitung akar kuadrat dari angka. Pada awal
urutan, tanda nomor diuji. Jika nomor tersebut adalah negatif, perhitungan tidak dilakukan, tetapi
kondisi kesalahan dilaporkan.
3. Untuk menulis dengan benar program komputer besar atau bahkan menengah adalah
tugas sangat sulit. Ini membantu jika ada mekanisme untuk melanggar tugas menjadi potongan kecil
yang dapat bekerja pada satu per satu. Kita sekarang beralih ke diskusi yang paling umum
pengalihan-of-control operasi ditemukan dalam set instruksi: cabang, melompat, dan panggilan prosedur.

CABANG INSTRUKSI Sebuah instruksi cabang, juga disebut instruksi melompat, memiliki sebagai salah satu
Operand alamat dari instruksi berikutnya yang akan dieksekusi. Paling sering, instruksi adalah cabang
bersyarat petunjuk. Artinya, cabang dibuat (program update counter untuk alamat yang sama ditentukan
dalam operan) hanya jika kondisi tertentu terpenuhi. Jika tidak, instruksi berikutnya dalam urutan dijalankan
(Program peningkatan kontra seperti biasa). Sebuah instruksi cabang di mana cabang selalu diambil adalah cabang
tanpa syarat.

Ada dua cara umum menghasilkan kondisi yang akan diuji dalam instruksi cabang bersyarat. Pertama,
kebanyakan mesin menyediakan 1-bit atau beberapa bit kondisi kode yang ditetapkan sebagai hasil dari
beberapa operasi. Kode ini dapat dianggap sebagai register dapat dilihat pengguna singkat. Sebagai contoh,
operasi aritmatika (menambah, mengurangi, dan sebagainya) bisa mengatur kode kondisi 2-bit dengan salah
satu dari empat nilai berikut: 0, positif, negatif, meluap. Pada mesin tersebut, mungkin ada empat instruksi
cabang bersyarat yang berbeda:

BRP X Cabang ke lokasi X jika hasilnya positif. BRN X Cabang


ke lokasi X jika hasilnya negatif. BRZ X Cabang ke lokasi X jika
hasilnya adalah nol. BRO X Cabang ke lokasi X jika overflow
terjadi.
12.4 / JENIS OPERASI 427

alamat
memori Petunjuk

200

SUB X, Y
BRZ 211
cabang tanpa
syarat
cabang
bersyarat
210 BR 202
211
202 203

225 BRE R1, R2, 235 201


cabang
bersyarat

235

Gambar 12.7 Instruksi cabang

Dalam semua kasus ini, hasilnya disebut adalah hasil dari operasi terbaru yang mengatur kode
kondisi.
Pendekatan lain yang dapat digunakan dengan format instruksi tiga alamat adalah untuk melakukan
perbandingan dan menentukan cabang di instruksi yang sama. Sebagai contoh,

BRE R1, R2, X Cabang X jika isi R1 = isi R2. Gambar 12.7 menunjukkan contoh operasi ini.
Perhatikan bahwa cabang dapat berupa maju ( instruksi dengan alamat yang lebih tinggi) atau mundur ( alamat
rendah). Contoh ini menunjukkan bagaimana sebuah tanpa syarat dan cabang bersyarat dapat
digunakan untuk membuat loop berulang instruksi. Petunjuk di lokasi 202 melalui 210 akan dieksekusi
berulang-ulang sampai hasil mengurangkan Y dari X adalah 0.

MELEWATKAN INSTRUKSI Bentuk lain transfer-of-control instruksi adalah instruksi melompat. Instruksi
melewatkan termasuk alamat tersirat. Biasanya, skip menyiratkan bahwa satu instruksi dilewati; dengan
demikian, alamat tersirat sama dengan alamat dari instruksi berikutnya ditambah satu panjang instruksi.

Karena instruksi melompat tidak memerlukan field alamat tujuan, ia bebas untuk melakukan
hal-hal lain. Sebuah contoh khas adalah kenaikan-dan-skip-jika-nol (ISZ) instruksi. Pertimbangkan
fragmen program berikut:
301
~
~
~
309 ISZ R1 310 BR
301 311

Dalam fragmen ini, dua perpindahan-of-control instruksi yang digunakan untuk menerapkan loop
berulang. R1 diatur dengan negatif dari jumlah iterasi yang akan dilakukan. Pada akhir loop, R1
bertambah. Jika tidak 0, program cabang kembali ke awal loop. Jika tidak, cabang yang dilewati, dan
program berlanjut dengan instruksi berikutnya setelah akhir loop.
428 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

PROSEDUR PANGGILAN INSTRUKSI Mungkin inovasi yang paling penting dalam perkembangan bahasa
pemrograman adalah prosedur. Prosedur adalah program komputer selfcontained yang dimasukkan ke
dalam program yang lebih besar. Pada setiap titik dalam program prosedur dapat dipanggil, atau bernama. Prosesor
diperintahkan untuk pergi dan melaksanakan seluruh prosedur dan kemudian kembali ke titik dari mana
panggilan berlangsung.

Dua alasan utama untuk penggunaan prosedur ekonomi dan modularitas. Prosedur memungkinkan potongan
kode yang sama untuk digunakan berkali-kali. Hal ini penting bagi perekonomian dalam upaya pemrograman dan
untuk membuat paling efisien penggunaan ruang penyimpanan dalam sistem (program harus disimpan). Prosedur
juga memungkinkan tugas pemrograman besar untuk dibagi lagi menjadi unit yang lebih kecil. Ini penggunaan modularitas

sangat memudahkan tugas pemrograman.


Mekanisme Prosedur melibatkan dua instruksi dasar: instruksi panggilan yang cabang dari
lokasi hadir untuk prosedur, dan instruksi pengembalian yang kembali dari prosedur ke tempat dari
mana itu disebut. Kedua hal ini adalah bentuk-bentuk instruksi percabangan.

Gambar 12.8a menggambarkan penggunaan prosedur untuk membangun sebuah program. Dalam
contoh ini, ada program utama mulai di lokasi 4000. Program ini mencakup panggilan untuk prosedur
PROC1, mulai dari lokasi 4500. Ketika instruksi panggilan ini ditemui, prosesor menunda pelaksanaan
program utama dan dimulai pelaksanaan PROC1 dengan mengambil instruksi berikutnya dari lokasi 4500.
dalam PROC1, ada dua panggilan ke PROC2 di lokasi 4800. dalam setiap kasus, pelaksanaan PROC1

Alamat proc1 Utama

4000

Program
4100 memori PANGGILAN
utama
4101

4500

PANGGILAN Proc2

prosedur
proc1
PANGGILAN Proc2
4651

4650
KEMBALI
4601

4600

4800

prosedur
Proc2

KEMBALI

(A) Panggilan dan kembali (B) urut Eksekusi

Gambar 12.8 Prosedur bersarang


12.4 / JENIS OPERASI 429

ditangguhkan dan PROC2 dijalankan. Pernyataan RETURN menyebabkan prosesor untuk kembali ke
program panggilan dan melanjutkan eksekusi pada instruksi setelah instruksi PANGGILAN sesuai.
Perilaku ini diilustrasikan pada Gambar 12.8b.
Tiga poin yang perlu diperhatikan:

1. Sebuah prosedur dapat dipanggil dari lebih dari satu lokasi.

2. Sebuah panggilan prosedur dapat muncul dalam prosedur. Hal ini memungkinkan bersarang dari-prosedur

prosedur-ke kedalaman sewenang-wenang.

3. Setiap panggilan prosedur yang cocok dengan kembali dalam program yang disebut.

Karena kami ingin dapat memanggil prosedur dari berbagai titik, prosesor harus entah
bagaimana menyimpan alamat kembali sehingga kembali dapat berlangsung tepat. Ada tiga tempat
umum untuk menyimpan alamat kembali:

Daftar
Mulai dari yang disebut prosedur

Atas tumpukan

Pertimbangkan mesin-bahasa instruksi X PANGGILAN, yang merupakan singkatan Prosedur panggilan di lokasi X. Jika
pendekatan register digunakan, PANGGILAN X menyebabkan tindakan berikut:

RN v PC + PC v X

di mana RN adalah register yang selalu digunakan untuk tujuan ini, PC adalah program counter, dan
adalah panjang instruksi. disebut prosedur sekarang dapat menyimpan isi dari RN yang akan digunakan
untuk kembali kemudian.
Kemungkinan kedua adalah untuk menyimpan alamat kembali pada awal prosedur. Dalam hal ini, HUBUNGI X
penyebab

X v PC + PC v X +
1

Hal ini cukup berguna. Alamat kembali telah disimpan dengan aman pergi.
Kedua pendekatan sebelumnya bekerja dan telah digunakan. Satu-satunya batasan dari pendekatan ini adalah
bahwa mereka mempersulit penggunaan reentrant Prosedur. Sebuah prosedur reentrant adalah salah satu di mana
dimungkinkan untuk memiliki beberapa panggilan terbuka untuk itu pada waktu yang sama. Sebuah prosedur rekursif (yang
menyebut dirinya) adalah contoh dari penggunaan fitur ini (lihat Lampiran H). Jika parameter yang dilewatkan melalui
register atau memori untuk prosedur reentrant, beberapa kode harus bertanggung jawab untuk menyimpan parameter
sehingga register atau ruang memori yang tersedia untuk panggilan prosedur lainnya.

Pendekatan yang lebih umum dan kuat adalah dengan menggunakan stack (lihat Lampiran O untuk diskusi
tentang tumpukan). Ketika prosesor mengeksekusi panggilan, menempatkan alamat pengirim di stack. Ketika
dijalankan kembali, menggunakan alamat pada stack. Gambar 12.9 menggambarkan penggunaan stack.

Selain memberikan alamat pengirim, juga sering diperlukan untuk melewati parameter dengan
panggilan prosedur. Ini dapat diteruskan di register. Kemungkinan lain adalah untuk menyimpan
parameter dalam memori setelah instruksi PANGGILAN. Dalam hal ini, kembali harus ke lokasi berikut
parameter. Sekali lagi, baik dari
430 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

4601 4651

4101 4101 4101 4101 4101


(A) tumpukan Awal (B) Setelah (C) Awal (D) Setelah (E) Setelah (F) Setelah (G) Setelah
isi PANGGILAN proc1 PANGGILAN Proc2 RETURN PANGGILAN Proc2 RETURN RETURN

Gambar 12.9 Penggunaan Stack untuk Melaksanakan Bersarang Subrutin dari Gambar 12.8

pendekatan ini memiliki kelemahan. Jika register yang digunakan, program yang disebut dan program menelepon
harus ditulis untuk memastikan bahwa register digunakan dengan benar. The penyimpanan parameter dalam
memori membuat sulit untuk bertukar sejumlah variabel parameter. Kedua pendekatan mencegah penggunaan
prosedur reentrant.
Pendekatan yang lebih fleksibel untuk parameter kelulusan adalah stack. Ketika prosesor mengeksekusi
panggilan, tidak hanya tumpukan alamat pengirim, tumpukan parameter yang harus diteruskan ke yang disebut
prosedur. Prosedur yang disebut dapat mengakses parameter dari stack. Setelah kembali, kembali parameter
juga dapat ditempatkan pada stack. Seluruh set parameter, termasuk alamat pengirim, yang disimpan untuk
pemanggilan prosedur disebut sebagai tumpukan bingkai.

Sebagai contoh adalah pada Gambar 12.10. Contoh mengacu pada prosedur P dimana variabel
lokal x 1 dan x 2 dinyatakan, dan prosedur Q, yang P dapat memanggil dan di mana variabel lokal y 1 dan y
2 dinyatakan. Dalam gambar ini, kembali

Stack
y2
pointer

y1

Old frame pointer frame


pointer
Q: titik kembali

Stack
x2 x2
pointer

x1 x1

Old pointer
frame Old pointer
pointer

P: titik kembali bingkai P: titik kembali bingkai

(Sebuah) P aktif (B) P telah disebut Q

Gambar 12.10 Stack Bingkai Pertumbuhan Menggunakan Contoh Prosedur P dan Q


12,5 / INTEL x86 DAN ARM JENIS OPERASI 431

point untuk setiap prosedur adalah item pertama disimpan dalam stack frame yang sesuai. Berikutnya
disimpan pointer ke awal frame sebelumnya. Hal ini diperlukan jika jumlah atau panjang parameter untuk
ditumpuk adalah variabel.

12,5 INTEL x86 DAN ARM JENIS OPERASI

Jenis x86 Operasi


x86 menyediakan array kompleks jenis operasi, termasuk sejumlah instruksi khusus. Tujuannya adalah untuk
menyediakan alat-alat untuk penulis compiler untuk menghasilkan dioptimalkan mesin terjemahan bahasa
program bahasa tingkat tinggi. Tabel 12.8 mencantumkan jenis dan memberikan contoh masing-masing.
Sebagian besar adalah petunjuk konvensional ditemukan di sebagian besar mesin set instruksi, tetapi
beberapa jenis instruksi yang disesuaikan dengan arsitektur x86 dan kepentingan tertentu. Lampiran A dari

tabel 12.8 Jenis x86 Operasi (dengan Contoh Operasi Khas)

Petunjuk Deskripsi

Gerakan Data

MOV Pindah operan, antara register atau antara register dan memori.

DORONG Mendorong operan ke stack.

PUSHA Mendorong semua register pada stack.

MOVSX Langkah byte, kata, dword, tanda diperpanjang. Bergerak byte untuk sebuah kata atau kata untuk doubleword dengan
ekstensi berpasangan-pelengkap tanda.

LEA Memuat alamat efektif. Banyak offset sumber operan, daripada nilainya untuk operan tujuan.

XLAT Tabel terjemahan. Menggantikan byte dalam AL dengan byte dari tabel terjemahan-kode pengguna.
Ketika XLAT dijalankan, AL harus memiliki indeks unsigned ke meja. XLAT mengubah isi AL dari indeks
tabel untuk entri tabel.

IN, OUT Input, output operan dari ruang I / O.

Hitung

MENAMBAHKAN Menambahkan operan.

SUB operan Kurangi.

MUL Unsigned perkalian bilangan bulat, dengan byte, kata, atau operan kata ganda, dan kata, doubleword, atau hasil
quadword.

IDIV Ditandatangani membagi.

Logis

DAN DAN operan.

BTS uji bit dan set. Beroperasi pada operan sedikit lapangan. Instruksi salinan nilai saat ini dari sedikit bendera CF
dan menetapkan bit asli untuk 1.

BSF Bit memindai ke depan. Scan kata atau doubleword untuk 1-bit dan menyimpan jumlah pertama 1-bit ke
register.

SHL / SHR Bergeser kiri logis atau kanan.

SAL / SAR Pergeseran aritmatika kiri atau kanan.

( terus)
432 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

tabel 12.8 terus-menerus

Petunjuk Deskripsi

ROL / ROR Putar kiri atau kanan.

SETcc Menetapkan byte ke nol atau satu tergantung pada salah satu 16 kondisi yang didefinisikan oleh flag status.

kontrol transfer

JMP melompat tanpa syarat.

PANGGILAN Mentransfer kontrol ke lokasi lain. Sebelum transfer, alamat dari instruksi berikut PANGGILAN
ditempatkan di stack.

JE / JZ Melompat jika sama / nol.

LOOPE / LOOPZ Loop jika sama / nol. Ini adalah lompatan bersyarat menggunakan nilai yang disimpan dalam register ECX. instruksi
pertama decrements ECX sebelum pengujian ECX untuk kondisi cabang.

INT / INTO Interupsi / interrupt jika overflow. Mentransfer kontrol ke rutin layanan interupsi.

Operasi String

movs Langkah byte, kata, dword tali. instruksi beroperasi pada satu elemen dari string, diindeks oleh register
ESI dan EDI. Setelah setiap operasi string, register secara otomatis bertambah atau dikurangi untuk
menunjuk ke elemen berikutnya dari string.

LODS Beban byte, kata, dword string.

Tingkat Tinggi Bahasa Dukungan

MEMASUKKAN Membuat stack frame yang dapat digunakan untuk menerapkan aturan bahasa tingkat tinggi blok-terstruktur.

MENINGGALKAN Membalikkan aksi sebelumnya ENTER.

TERIKAT Periksa batas array. Memverifikasi bahwa nilai dalam operan 1 adalah dalam batas bawah dan atas. Batas-batas berada
di dua lokasi memori yang berdekatan direferensikan oleh operan 2. Sebuah interupsi terjadi jika nilai di luar batas.
Instruksi ini digunakan untuk memeriksa indeks array.

Flag Kontrol

STC Menetapkan bendera Carry.

LAHF Memuat AH mendaftar dari bendera. Salinan SF, ZF, AF, PF, dan CF bit menjadi Sebuah mendaftar.

segmen Register

LDS Beban pointer ke DS dan register lain. sistem Kontrol

HLT Berhenti.

MENGUNCI Menegaskan suatu pegangan pada memori bersama sehingga Pentium memiliki penggunaan eksklusif selama instruksi
yang segera mengikuti LOCK.

ESC Processor ekstensi melarikan diri. Kode escape yang menunjukkan petunjuk berhasil yang akan dieksekusi
oleh coprocessor numerik yang mendukung integer-presisi tinggi dan perhitungan floating-point.

TUNGGU Tunggu sampai SIBUK # dinegasikan. Menunda eksekusi program Pentium sampai prosesor mendeteksi
bahwa pin BUSY tidak aktif, menunjukkan bahwa coprocessor numerik selesai eksekusi.

Perlindungan

SGDT Menyimpan tabel deskripsi global.

LSL batas segmen beban. Load register yang ditentukan pengguna dengan batas segmen.

Verr / Verw Verifikasi segmen untuk membaca / menulis.


12,5 / INTEL x86 DAN ARM JENIS OPERASI 433

Petunjuk Deskripsi

Manajemen Cache

INVD Flushes memori cache internal.

WBINVD Flushes memori internal cache setelah menulis garis kotor untuk memori.

INVLPG Membatalkan terjemahan lookaside penyangga (TLB) entri.

[CART06] daftar instruksi x86, bersama-sama dengan operan untuk masing-masing dan efek dari
instruksi pada kode kondisi. Lampiran B dari NASM pengguna bahasa assembly memberikan gambaran
yang lebih rinci dari setiap instruksi x86. Kedua dokumen tersebut tersedia di situs Web buku ini.

CALL / RETURN INSTRUKSI x86 menyediakan empat instruksi untuk mendukung panggilan prosedur / kembali:
CALL, ENTER, TINGGALKAN, RETURN. Ini akan menjadi pelajaran untuk melihat dukungan yang diberikan
oleh petunjuk ini. Ingat dari Gambar 12.10 bahwa sarana umum menerapkan mekanisme prosedur panggilan /
return adalah melalui penggunaan frame stack. Ketika prosedur baru yang disebut, berikut ini harus dilakukan
setelah masuk ke prosedur baru:

Dorong titik kembali pada stack.


Dorong frame pointer saat ini di stack.
Salin stack pointer sebagai nilai baru dari pointer bingkai.
Sesuaikan stack pointer untuk mengalokasikan bingkai.

Instruksi PANGGILAN mendorong arus nilai instruksi pointer ke stack dan menyebabkan melompat ke
titik masuknya prosedur dengan menempatkan alamat dari entry point dalam instruksi pointer. Di 8088
dan 8086 mesin, prosedur khas dimulai dengan urutan

DORONG EBP

MOV EBP, ESP

SUB ESP, space_for_locals

di mana EBP adalah frame pointer dan ESP adalah pointer stack. Dalam 80286 dan kemudian mesin,
ENTER instruksi melakukan semua operasi tersebut di dalam sebuah instruksi.

ENTER instruksi telah ditambahkan ke set instruksi untuk memberikan dukungan langsung untuk compiler.
instruksi juga termasuk fitur untuk mendukung apa yang disebut prosedur bersarang dalam bahasa seperti
Pascal, COBOL, dan Ada (tidak ditemukan di C atau FORTRAN). Ternyata ada cara yang lebih baik menangani
prosedur panggilan bersarang untuk bahasa ini. Selanjutnya, meskipun ENTER instruksi menyimpan beberapa
byte memori dibandingkan dengan PUSH, MOV, urutan SUB (4 bytes dibandingkan 6 byte), itu benar-benar
membutuhkan waktu lebih lama untuk mengeksekusi (10 siklus clock vs siklus 6 jam). Dengan demikian,
meskipun mungkin tampak ide yang baik untuk para desainer set instruksi untuk menambahkan fitur ini, itu
mempersulit pelaksanaan prosesor sambil memberikan sedikit atau tidak ada manfaat. Kita akan melihat bahwa,
sebaliknya, pendekatan RISC
434 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

desain prosesor akan menghindari instruksi kompleks seperti ENTER dan mungkin menghasilkan
implementasi yang lebih efisien dengan urutan instruksi sederhana.

INGATAN PENGELOLAAN set instruksi khusus berkaitan dengan segmentasi memori. Ini adalah instruksi
privileged yang hanya dapat dijalankan dari sistem operasi. Mereka memungkinkan tabel segmen lokal dan
global (disebut tabel deskriptor) yang akan dimuat dan membaca, dan untuk tingkat hak istimewa segmen
untuk diperiksa dan diubah.
Instruksi khusus untuk menangani cache on-chip yang dibahas dalam Bab 4.

STATUS BENDERA DAN KODE KONDISI flag status yang bit dalam register khusus yang dapat ditetapkan oleh operasi
tertentu dan digunakan dalam instruksi cabang bersyarat. Syarat kode kondisi mengacu pada pengaturan dari satu
atau lebih bendera status. Dalam x86 dan banyak arsitektur lainnya, status flag ditetapkan oleh aritmatika dan
membandingkan operasi. Operasi membandingkan dalam kebanyakan bahasa mengurangi dua operan, seperti
halnya operasi kurangi. Perbedaannya adalah bahwa operasi membandingkan hanya menetapkan status flag,
sedangkan operasi kurangi juga menyimpan hasil dari pengurangan dalam operan tujuan. Beberapa arsitektur juga
menetapkan bendera status instruksi transfer data.

Tabel 12.9 mencantumkan status flag digunakan pada x86. Setiap bendera, atau kombinasi dari bendera
ini, dapat diuji untuk melompat bersyarat. Tabel 12.10 menunjukkan kode kondisi (kombinasi dari nilai-nilai
bendera status) yang opcodes melompat bersyarat sudah ditetapkan.

Beberapa pengamatan menarik dapat dibuat tentang daftar ini. Pertama, kita mungkin ingin menguji dua operan
untuk menentukan apakah satu nomor lebih besar dari yang lain. Tapi ini akan tergantung pada apakah nomor tersebut
ditandatangani atau unsigned. Sebagai contoh, 8-bit nomor 11111111 lebih besar dari 00.000.000 jika dua angka
ditafsirkan sebagai unsigned integer (255 7 0) tapi kurang jika mereka dianggap sebagai 8-bit berpasangan melengkapi
nomor (-1 6 0). Oleh karena itu banyak bahasa perakitan memperkenalkan dua set istilah untuk membedakan dua kasus:
Jika kita membandingkan dua angka sebagai bilangan bulat ditandatangani, kami menggunakan istilah kurang dari dan lebih
besar dari; jika kita membandingkan mereka bulat sebagai unsigned, kita menggunakan istilah di bawah dan atas.

Pengamatan kedua menyangkut kompleksitas membandingkan bilangan bulat ditandatangani. Hasil


ditandatangani lebih besar dari atau sama dengan nol jika (1) bit tanda adalah nol dan tidak ada overflow (S = 0 DAN O
= 0), atau (2) bit tanda adalah salah satu dan ada overflow.

tabel 12.9 Flags Status x86

Status Bit Nama Deskripsi

C Membawa Menunjukkan membawa atau meminjam dari posisi bit paling kiri setelah operasi aritmatika.
Juga dimodifikasi oleh beberapa shift dan operasi rotate.

P Keseimbangan Paritas byte paling signifikan dari hasil aritmatika atau operasi logika. 1 menunjukkan
bahkan paritas; 0 menunjukkan paritas ganjil.

SEBUAH Carry tambahan Merupakan membawa atau meminjam antara setengah-byte 8-bit aritmatika
atau operasi logika. Digunakan dalam kode-biner aritmatika desimal.

Z Nol Menunjukkan bahwa hasil dari aritmatika atau operasi logika adalah 0.

S Tanda Menunjukkan tanda hasil dari operasi aritmatika dan logika.

HAI Meluap Menunjukkan overflow aritmetika setelah penambahan atau pengurangan untuk berpasangan melengkapi
aritmatika.
12,5 / INTEL x86 DAN ARM JENIS OPERASI 435

tabel 12.10 Kode x86 Kondisi untuk Langsung Bersyarat Instruksi SETcc

Simbol kondisi Diuji Komentar

A, NBE C = 0 DAN Z = 0 Atas; Tidak di bawah atau sama (lebih besar dari, unsigned)

AE, NB, NC C = 0 Di atas atau sama; Tidak di bawah (lebih besar dari atau sama, unsigned); tidak

membawa

B, NAE, CC = 1 Di bawah; Tidak di atas atau sama (kurang dari, unsigned); Carry set

BE, NA C = 1 OR Z = 1 Di bawah atau sama; Tidak di atas (kurang dari atau sama, unsigned)

E, Z Z=1 Sama; Nol (ditandatangani atau unsigned)

G, NLE [(S = 1 DAN O = 1) OR (S = 0 dan O = 0)] Lebih besar dari; Tidak kurang dari atau sama (ditandatangani)

AND [Z = 0]

GE, NL (S = 1 DAN O = 1) OR (S = 0 AND O = 0) Lebih besar dari atau sama; Tidak kurang dari (ditandatangani)

L, NGE (S = 1 DAN O = 0) OR (S = 0 AND O = 1) Kurang dari; Tidak lebih besar dari atau sama (ditandatangani)

LE, NG (S = 1 DAN O = 0) OR (S = 0 AND O = 1) Kurang dari atau sama; Tidak lebih besar dari (ditandatangani)

OR (Z = 1)

NE, NZ Z=0 Tidak sama; Tidak nol (ditandatangani atau unsigned)

TIDAK O=0 Tidak ada luapan

NS S=0 Tidak menandatangani (tidak negatif)

NP, PO P=0 Tidak paritas; paritas ganjil

HAI O=1 Meluap

P P=1 Keseimbangan; paritas bahkan

S S=1 Tanda (negatif)

Sebuah studi dari Gambar 10.4 harus meyakinkan Anda bahwa kondisi diuji untuk berbagai operasi
ditandatangani sesuai.

X 86 S IMD INSTRUKSI Pada tahun 1996, Intel memperkenalkan teknologi MMX ke lini produk Pentium nya. MMX
diatur instruksi yang sangat optimal untuk tugas-tugas multimedia. Ada 57 instruksi baru yang memperlakukan data
dalam SIMD (single-instruksi, multipledata) fashion, yang memungkinkan untuk melakukan operasi yang sama,
seperti penambahan atau perkalian, pada beberapa elemen data sekaligus. Setiap instruksi biasanya memakan
waktu satu siklus clock tunggal untuk mengeksekusi. Untuk aplikasi yang tepat, operasi ini paralel cepat dapat
menghasilkan speedup dua sampai delapan kali selama algoritma yang sebanding yang tidak menggunakan
instruksi MMX [ATKI96]. Dengan diperkenalkannya arsitektur x86 64-bit, Intel telah memperluas ekstensi ini untuk
menyertakan quadword ganda (128 bit) operan dan operasi floating-point. Dalam ayat ini, kita menggambarkan fitur
MMX.

Fokus MMX adalah pemrograman multimedia. Video dan audio data yang biasanya terdiri dari array
besar jenis data kecil, seperti 8 atau 16 bit, sedangkan petunjuk konvensional disesuaikan untuk beroperasi
pada data 32 atau 64-bit. Berikut adalah beberapa contoh: Dalam grafis dan video, adegan tunggal terdiri
dari array piksel, 2 dan

2 Sebuah pixel, atau elemen gambar, adalah elemen terkecil dari sebuah gambar digital yang dapat diberikan tingkat abu-abu. Ekuivalen, pixel

adalah titik individu dalam representasi dot-matrix dari gambar.


436 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

ada 8 bit untuk setiap pixel atau 8 bit untuk setiap komponen warna pixel (merah, hijau, biru). audio sampel
khas dikuantisasi menggunakan 16 bit. Untuk beberapa algoritma grafis 3D, 32 bit yang umum untuk tipe data
dasar. Untuk menyediakan operasi paralel pada ini panjang data, tiga jenis data baru didefinisikan dalam MMX.
Setiap jenis data 64 bit panjang dan terdiri dari beberapa bidang data yang lebih kecil, yang masing-masing
memegang fixed-point integer. Jenis adalah sebagai berikut:

byte dikemas: Delapan byte dikemas menjadi satu kuantitas 64-bit


kata dikemas: Empat kata 16-bit dikemas menjadi 64 bit
Dikemas doubleword: Dua doublewords 32-bit dikemas ke dalam 64 bit Tabel 12,11 daftar set instruksi
MMX. Sebagian besar instruksi melibatkan operasi paralel pada byte, kata, atau doublewords. Sebagai contoh,
instruksi PSLLW melakukan pergeseran logis kiri secara terpisah pada masing-masing empat kata dalam kata
operan dikemas; instruksi PADDB mengambil operan byte dikemas sebagai masukan dan melakukan
penambahan paralel pada setiap posisi byte secara independen untuk menghasilkan output byte dikemas.

Salah satu fitur yang tidak biasa dari set instruksi baru adalah pengenalan saturasi aritmatika untuk
byte dan kata 16-bit operan. Dengan aritmatika unsigned biasa, ketika sebuah overflows operasi (yaitu,
carry dari bit yang paling signifikan), bit ekstra terpotong. Hal ini disebut sebagai sampul, karena efek
pemotongan dapat, misalnya, untuk menghasilkan hasil samping yang lebih kecil dari dua operan
masukan. Pertimbangkan penambahan dua kata, dalam heksadesimal, F000h dan 3000H. Jumlah
tersebut akan dinyatakan sebagai

F000h = 1111 0000 0000 0000

+ 3000H = 0011 0000 0000 0000


10010 0000 0000 0000 = 2000H

Jika dua angka diwakili intensitas gambar, maka hasil penambahan adalah untuk membuat kombinasi
dua warna gelap berubah menjadi lebih ringan. Hal ini biasanya tidak apa yang dimaksudkan. Dengan
saturasi aritmatika, jika hasil penambahan overflow atau pengurangan hasil dalam underflow, hasilnya
diatur ke terbesar atau terkecil nilai representable. Untuk contoh sebelumnya, dengan saturasi aritmatika,
kita memiliki

F000h = 1111 0000 0000 0000

+ 3000H = 0011 0000 0000 0000


10010 0000 0000 0000 1111 1111 1111

1111 = FFFFh

Untuk memberikan nuansa untuk penggunaan instruksi MMX, kita lihat sebuah contoh, diambil dari
[PELE97]. Sebuah aplikasi video umum adalah fade-out, fade-in efek, di mana salah satu adegan secara bertahap
melarutkan menjadi lain. Dua gambar digabungkan dengan rata-rata tertimbang:

Result_pixel = A_pixel * fade + B_pixel * (1 - memudar)


12,5 / INTEL x86 DAN ARM JENIS OPERASI 437

tabel 12.11 MMX Instruction Set

Kategori Petunjuk Deskripsi

PADD [B, W, D] add paralel dikemas delapan byte, empat kata 16-bit, atau dua
doublewords 32-bit, dengan sampul.

PADDS [B, W] Tambahkan dengan saturasi.

PADDUS [B, W] Menambahkan unsigned dengan saturasi.

Psub [B, W, D] Kurangi dengan sampul.

PSUBS [B, W] Kurangi dengan saturasi.


Hitung
PSUBUS [B, W] Kurangi unsigned dengan saturasi.

PMULHW kalikan paralel empat menandatangani kata 16-bit, dengan highorder 16 bit
dari hasil 32-bit yang dipilih.

PMULLW kalikan paralel empat menandatangani kata 16-bit, dengan loworder 16 bit
dari hasil 32-bit yang dipilih.

PMADDWD kalikan paralel empat menandatangani kata 16-bit; menambahkan bersama pasangan yang

berdekatan dari hasil 32-bit.

PCMPEQ [B, W, D] Paralel membandingkan untuk kesetaraan; Hasil adalah topeng dari 1s jika benar atau 0s jika

palsu.
Perbandingan
PCMPGT [B, W, D] Paralel membandingkan untuk lebih besar dari; Hasil adalah topeng dari 1s jika benar atau

0s jika palsu.

PACKUSWB Pak kata ke byte dengan saturasi unsigned.

PACKSS [WB, DW] Pak kata-kata ke dalam byte, atau doublewords dalam kata-kata, dengan saturasi

ditandatangani.
Konversi
PUNPCKH [BW, WD, DQ] unpack paralel (disisipkan merge) high-order byte, kata, atau
doublewords dari register MMX.

PUNPCKL [BW, WD, DQ] unpack paralel (disisipkan merge) low-order byte, kata, atau
doublewords dari register MMX.

PAND 64-bit bitwise logika AND

PNDN 64-bit bitwise logical AND NOT


Logis
POR 64-bit bitwise logika OR

PXOR 64-bit bitwise XOR logis

PSLL [W, D, Q] Paralel pergeseran kiri logis dari kata-kata dikemas, doublewords, atau quadword
oleh jumlah yang ditentukan dalam MMX register atau nilai langsung.

Bergeser PSRL [W, D, Q] Paralel shift kanan logis dikemas kata, doublewords, atau quadword.

PSRA [W, D] Paralel shift kanan aritmatika dari dikemas kata, doublewords, atau
quadword.

Transfer data MOV [D, Q] Pindahkan doubleword atau quadword ke / dari register MMX.

mgt negara Emms Kosong negara MMX (kosong FP register tag bit).

catatan: Jika instruksi mendukung beberapa tipe data [byte (B), kata (W), doubleword (D), quadword (Q)], jenis data yang ditunjukkan dalam tanda
kurung.

Perhitungan ini dilakukan pada setiap posisi pixel di A dan B. Jika serangkaian frame video yang
dihasilkan sementara secara bertahap mengubah nilai memudar dari 1 ke 0 (skala tepat untuk 8-bit
integer), hasilnya adalah memudar dari gambar A gambar B.
438 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Gambar 12.11 menunjukkan urutan langkah-langkah yang diperlukan untuk satu set piksel. Komponen
pixel 8-bit dikonversi ke elemen 16-bit untuk mengakomodasi MMX 16-bit kemampuan berkembang biak. Jika
gambar-gambar ini menggunakan 640 * 480 resolusi, dan teknik melarutkan menggunakan semua 255 nilai yang
mungkin dari nilai memudar, maka jumlah total instruksi dieksekusi menggunakan MMX adalah 535.000.000.
Perhitungan yang sama, dilakukan tanpa instruksi MMX, membutuhkan 1,4 miliar eksekusi instruksi [INTE98].

Alfa Alfa

RGB RGB
gambar A gambar A

AR3 Ar2 AR1 Ar0 BR3 Br2 BR1 br0

1. Buka kemasan komponen AR3 Ar2 AR1 Ar0 BR3 Br2 br1 br0
pixel byte R dari gambar A
dan B
kurangi

2. Kurangi gambar B dari gambar A r3 r2 r1 r0

3. Hasil Kalikan dengan nilai memudar luntur luntur luntur luntur

fade r3 fade r2 fade r1 fade r0

4. Tambahkan gambar B piksel BR3 Br2 br1 br0

newr3 newr2 newr1 newr0

5. piksel komposit Pack baru kembali


ke byte

r3 r2 r1 r0

MMX kode urutan melakukan operasi ini:

pxor MM7, MM7 ; Nol keluar MM7


movq mm3, fad_val ; Nilai beban fade direplikasi 4 kali
MOVD mm0, imageA; beban 4 komponen pixel merah dari gambar A MOVD
MM1, imageB; beban 4 komponen pixel merah dari gambar B punpckblw
mm0, MM7 ; Membongkar 4 piksel ke 16 bit
punpckblw MM1, MM7 ; Membongkar 4 piksel ke 16 bit
psubw mm0, MM1 ; Kurangi gambar B dari gambar A
pmulhw mm0, mm3 ; Kalikan hasilnya kurangi oleh nilai-nilai memudar
padddw mm0, MM1 ; Menambahkan hasil gambar B
packuswb mm0, MM7 ; Pak hasil 16-bit kembali ke byte

Gambar 12.11 Gambar Compositing pada Warna Pesawat Representasi


12,5 / INTEL x86 DAN ARM JENIS OPERASI 439

Jenis ARM Operasi


Arsitektur ARM menyediakan koleksi besar jenis operasi. Berikut ini adalah kategori utama:

Beban dan menyimpan instruksi: Dalam arsitektur ARM, hanya beban dan menyimpan instruksi
mengakses lokasi memori; aritmatika dan instruksi logis yang dilakukan hanya pada register dan
nilai-nilai langsung dikodekan dalam instruksi. Keterbatasan ini adalah karakteristik dari desain RISC dan
dieksplorasi lebih lanjut dalam Bab 15. arsitektur ARM mendukung dua jenis luas instruksi yang beban
atau menyimpan nilai satu register, atau sepasang register, dari atau ke memori: (1) beban atau
menyimpan kata 32-bit atau 8-bit unsigned byte, dan (2) beban atau menyimpan 16-bit unsigned
sindiran, dan beban dan menandatangani memperpanjang sindiran 16-bit atau 8-bit byte.

instruksi cabang: ARM mendukung instruksi cabang yang memungkinkan depan cabang
bersyarat atau mundur hingga 32 MB. Sebagai program counter adalah salah satu register
tujuan umum (R15), cabang atau melompat juga dapat dihasilkan dengan menulis nilai ke R15.
Sebuah panggilan subroutine dapat dilakukan oleh varian dari instruksi cabang standar. Serta
memungkinkan cabang maju atau mundur hingga 32 MB, Cabang dengan Link (BL) instruksi
mempertahankan alamat dari instruksi setelah cabang (alamat pengirim) di LR (R14). Cabang
ditentukan oleh kondisi lapangan 4-bit dalam instruksi.

petunjuk pengolahan data: Kategori ini berisi petunjuk logis (AND, OR, XOR), menambah dan
mengurangi petunjuk, dan uji dan instruksi membandingkan.

petunjuk Multiply: Petunjuk kalikan bilangan bulat beroperasi pada kata atau operan sindiran dan dapat
menghasilkan hasil yang normal atau panjang. Sebagai contoh, ada instruksi untuk perkalian yang
mengambil dua operan 32-bit dan menghasilkan hasil 64-bit.

Paralel penambahan dan pengurangan instruksi: Selain pengolahan data normal dan
berkembang biak petunjuk, ada satu set paralel penambahan dan pengurangan instruksi, di
mana bagian-bagian dari dua operan dioperasikan secara paralel. Misalnya, ADD16
menambahkan halfwords atas dua register untuk membentuk sindiran atas hasil dan
menambahkan halfwords bawah dua register yang sama untuk membentuk sindiran bawah
hasilnya. Instruksi-instruksi ini berguna dalam aplikasi pengolahan gambar, mirip dengan x86
instruksi MMX.

Memperpanjang petunjuk: Ada beberapa petunjuk untuk membongkar data dengan tanda atau nol memperluas
byte ke halfwords atau kata-kata, dan halfwords kata-kata.

Status akses mendaftar petunjuk: ARM menyediakan kemampuan untuk membaca dan juga menulis
bagian-bagian dari register status.

KONDISI KODE Arsitektur ARM mendefinisikan empat bendera kondisi yang disimpan dalam status
program mendaftar: N, Z, C, dan V (negatif, nol, Carry dan overflow), dengan makna dasarnya sama
dengan S, Z, C, dan bendera V
440 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

tabel 12.12 Kondisi ARM untuk Bersyarat Instruksi Eksekusi

Kode Simbol kondisi Diuji Komentar

0000 EQ Z=1 Sama

0001 NE Z=0 Tidak sama

0010 CS / HS C=1 Carry mengatur / unsigned yang lebih tinggi atau sama

0011 CC / LO C=0 Carry jelas / unsigned rendah

0100 MI N=1 Minus / negatif

0101 PL N=0 Plus / positif atau nol

0110 VS V=1 Meluap

0111 VC V=0 Tidak ada luapan

1000 HAI C = 1 AND Z = 0 unsigned lebih tinggi

1001 LS C = 0 OR Z = 1 Unsigned lebih rendah atau sama

1010 GE N = V [(N = 1 AND V = 1) OR (N Ditandatangani lebih dari atau sama

= 0 AND V = 0)]

1011 LT NV [(N = 1 AND V = 0) OR (N = Menandatangani kurang dari

0 AND V = 1)]

1100 GT (Z = 0) DAN (N = V) Ditandatangani lebih besar dari

1101 LE (Z = 1) OR (N V) Menandatangani kurang dari atau sama

1110 AL - Selalu (tanpa syarat)

1111 - - instruksi ini hanya dapat dijalankan tanpa


syarat

dalam arsitektur x86. Keempat bendera merupakan kode kondisi ARM. Tabel 12.12 menunjukkan
kombinasi dari kondisi yang eksekusi bersyarat didefinisikan.

Ada dua aspek yang tidak biasa untuk penggunaan kode kondisi ARM:

1. Semua petunjuk, bukan hanya instruksi cabang, termasuk bidang kode kondisi,
yang berarti bahwa hampir semua instruksi dapat kondisional dijalankan. Kombinasi dari
pengaturan bendera kecuali 1110 atau 1111 di bidang kode kondisi instruksi ini menandakan
bahwa instruksi akan dieksekusi hanya jika kondisi terpenuhi.

2. Semua instruksi pengolahan data (aritmatika, logis) mencakup bit S yang signi-
fies apakah instruksi update bendera kondisi.

Penggunaan eksekusi bersyarat dan pengaturan bersyarat dari bendera kondisi membantu dalam
desain program yang lebih pendek yang menggunakan memori kurang. Di sisi lain, semua instruksi termasuk 4
bit untuk kode kondisi, sehingga ada trade-off di bahwa lebih sedikit bit dalam instruksi 32-bit yang tersedia
untuk opcode dan operan. Karena ARM adalah desain RISC yang sangat bergantung pada daftar menangani,
ini tampaknya menjadi wajar trade-off.
12,7 / ISTILAH KUNCI, PERTANYAAN REVIEW, DAN MASALAH 441

12,6 DIREKOMENDASIKAN MEMBACA

Instruksi x86 set baik tertutup oleh [BREY09]. Set instruksi ARM ditutupi [SLOS04] dan [KNAG04]. [INTE04c]
menjelaskan pertimbangan software yang berhubungan dengan mikroprosesor arsitektur Endian dan membahas
pedoman untuk mengembangkan Endian-netral kode (kertas tersedia di bagian konten premium untuk buku ini).

BREY09 Brey, B. Intel Mikroprosesor: 8086/8066, 80186/80188, 80286, 80386,


80.486, Pentium, Pentium Pro Processor, Pentium II, Pentium III, Pentium 4 dan Core2 dengan
Extensions 64-bit. Upper Saddle River, NJ: Prentice Hall, 2009.
INTE04c Intel Corp. Endianness White Paper. November 15, 2004.
KNAG04 Knaggs, P., dan Welsh, S. ARM: Pemrograman Assembly Bahasa. Maksud-
mulut University, School of Design, Engineering, dan Komputasi, 31 Agustus
2004. www.freetechbooks.com/arm-assembly-language-programming-t729.html
SLOS04 Sloss, A .; Symes, D .; dan Wright, C. Sistem ARM Developer Panduan. San
Francisco: Morgan Kaufmann, 2004.

12,7 ISTILAH KUNCI, PERTANYAAN REVIEW, DAN MASALAH

Syarat utama

melompat sedikit operasi Prosedur panggilan prosedur

endian logis mesin pengembalian prosedur dorongan

aritmatika pergeseran pergeseran instruksi reentrant membalikkan notasi

bi-endian cabang big operan dikemas pop Polandia memutar melewati

endian desimal tumpukan

cabang bersyarat set


instruksi

Ulasan
akumulator Pertanyaan
12.1 Apa unsur-unsur khas dari instruksi mesin?
12.2 Apa jenis lokasi dapat memegang sumber dan tujuan operan?
12.3 Jika instruksi berisi empat alamat, apa yang mungkin menjadi tujuan setiap alamat?
12.4 Daftar dan menjelaskan secara singkat lima set instruksi masalah desain penting.

12,5 Apa jenis operan yang khas di set instruksi mesin?


12,6 Apa hubungan antara kode karakter IRA dan desimal dikemas
perwakilan?
12,7 Apa perbedaan antara pergeseran aritmatika dan pergeseran logis?
12,8 Mengapa transfer instruksi kontrol yang dibutuhkan? alamat
442 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

12,9 Daftar dan menjelaskan secara singkat dua cara umum menghasilkan kondisi yang akan diuji dalam
instruksi cabang bersyarat.
12.10 Apa yang dimaksud dengan istilah bersarang prosedur?
12.11 Daftar tiga tempat yang mungkin untuk menyimpan alamat kembali untuk kembali prosedur.
12.12 Apa adalah prosedur reentrant?
12.13 Apa notasi Polish terbalik?
12.14 Apa perbedaan antara endian besar dan kecil endian?

masalah
12.1 Tampilkan dalam notasi hex:
Sebuah. format desimal yang dikemas selama 23
b. Karakter ASCII 23
12.2 Untuk masing-masing angka desimal dikemas berikut, menunjukkan nilai desimal:
Sebuah. 0111 0011 0000 1001
b. 0101 1000 0010
c. 0100 1010 0110
12.3 Sebuah mikroprosesor yang diberikan memiliki kata-kata dari 1 byte. Apa yang terkecil dan terbesar bilangan bulat
yang dapat diwakili dalam representasi berikut:
Sebuah. unsigned
b. Sign-besaran
c. pelengkap yang
d. berpasangan melengkapi
e. Unsigned desimal dikemas
f. Menandatangani desimal dikemas

12.4 Banyak prosesor memberikan logika untuk melakukan aritmatika pada angka desimal dikemas.
Meskipun aturan untuk aritmatika desimal adalah sama dengan yang untuk operasi biner, hasil desimal
mungkin memerlukan beberapa koreksi ke angka individu jika logika biner digunakan.

Pertimbangkan penambahan desimal dari dua angka unsigned. Jika setiap nomor terdiri dari N digit, maka ada 4 N
bit di setiap nomor. Dua angka yang akan ditambahkan menggunakan penambah biner. Sarankan aturan sederhana
untuk memperbaiki hasilnya. Melakukan penambahan dalam mode ini pada nomor 1698 dan 1786.

12,5 Puluhan pelengkap dari angka desimal X didefinisikan sebagai 10 N - X, dimana N


adalah jumlah angka desimal di nomor tersebut. Menggambarkan penggunaan sepuluh ini melengkapi representasi untuk
melakukan pengurangan desimal. Menggambarkan prosedur dengan ing subtract- (0326) 10 dari (0736) 10.

12,6 Bandingkan nol, satu, dua, dan tiga-alamat mesin dengan menulis program untuk menghitung

X = (A + B * C)> (D - E * F)

untuk masing-masing empat mesin. Petunjuk yang tersedia untuk digunakan adalah sebagai berikut:

0 Alamat 1 Alamat 2 Alamat 3 Alamat

PUSH M LOAD M MOVE (X d Y) MOVE (X d Y)

POP M STORE M ADD (X d X + Y) ADD (X d Y + Z)

MENAMBAHKAN ADD M SUB (X d X - Y) SUB (X d Y - Z)

SUB SUB M MUL (X d X * Y) MUL (X d Y * Z)

MUL MUL M DIV (X d X / Y) DIV (X d Y / Z)

DIV DIV M
12,7 / ISTILAH KUNCI, PERTANYAAN REVIEW, DAN MASALAH 443

12,7 Pertimbangkan komputer hipotetis dengan set instruksi dari hanya dua n bit instruksi yang
tions. Bit pertama menentukan opcode, dan bit yang tersisa menentukan salah satu dari 2 n 1
n bit kata-kata memori utama. Dua instruksi adalah sebagai berikut: SUBS X Kurangi isi lokasi X dari

akumulator, dan menyimpan


mengakibatkan lokasi X dan akumulator. JUMP
alamat X tempat X dalam program counter.

Sebuah kata dalam memori utama mungkin berisi baik instruksi atau bilangan biner dalam notasi pelengkap
berpasangan. Menunjukkan bahwa instruksi repertoar ini cukup lengkap dengan menentukan bagaimana
operasi berikut dapat diprogram:
Sebuah. Transfer data: Lokasi X untuk akumulator, akumulator ke lokasi X
b. Selain itu: Tambah isi lokasi X untuk akumulator
c. cabang bersyarat
d. logis OR
e. I / O Operasi
12,8 Banyak instruksi set berisi instruksi NOOP, yang berarti tidak ada operasi, yang memiliki
tidak berpengaruh pada keadaan prosesor selain incrementing program counter. Menyarankan beberapa penggunaan
instruksi ini.
12,9 Dalam Bagian 12.4, dinyatakan bahwa kedua pergeseran aritmatika kiri dan pergeseran kiri yang logis
sesuai dengan perkalian dengan 2 ketika tidak ada overflow, dan jika overflow terjadi, aritmatika dan operasi pergeseran
meninggalkan logis menghasilkan hasil yang berbeda, tetapi aritmatika meninggalkan pergeseran mempertahankan tanda
nomor. Menunjukkan bahwa pernyataan ini benar selama 5-bit berpasangan melengkapi bilangan bulat.

12.10 Dengan cara apa nomor bulat menggunakan shift kanan aritmatika (misalnya, putaran arah + , Putaran menuju - , Menuju
nol, jauh dari 0)?
12.11 Misalkan tumpukan akan digunakan oleh prosesor untuk mengatur panggilan prosedur dan kembali.
Dapat program counter dihilangkan dengan menggunakan bagian atas tumpukan sebagai program counter?

12.12 Arsitektur x86 mencakup instruksi disebut Decimal Adjust setelah Penambahan
(DAA). DAA melakukan urutan berikut instruksi:

if (( AL DAN 0Fh)> 9) OR (AF = 1) kemudian


AL d AL + 6; AF d 1;

lain
AF d 0;
berakhir jika; if ( AL> 9FH) OR (CF = 1) kemudian

AL d AL + 60H; CF d 1;

lain
CF d 0;
berakhir jika.

H menunjukkan heksadesimal. AL adalah 8-bit register yang memegang hasil penambahan dua 8-bit
unsigned integer. AF adalah bendera diatur jika ada carry dari bit 3 ke bit 4 di hasil tambahan. CF adalah
bendera diatur jika ada carry dari bit 7 sampai bit 8. Jelaskan fungsi yang dilakukan oleh instruksi DAA.

12.13 X86 Bandingkan instruksi (CMP) mengurangi operan sumber dari destina- yang
tion operan; itu update status flag (C, P, A, Z, S, O) tetapi tidak mengubah salah satu operan. CMP instruksi
dapat digunakan untuk menentukan apakah operan tujuan lebih besar dari, sama dengan, atau kurang dari
sumber operan.
444 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Sebuah. Misalkan dua operan diperlakukan sebagai unsigned integer. Tampilkan yang statusnya
bendera relevan untuk menentukan ukuran relatif dari dua bilangan bulat dan apa nilai-nilai bendera sesuai dengan yang
lebih besar dari, sama dengan, atau kurang dari.
b. Misalkan dua operan diperlakukan sebagai berpasangan melengkapi bilangan bulat ditandatangani.
Show yang flag status relevan untuk menentukan ukuran relatif dari dua bilangan bulat dan apa nilai-nilai
bendera sesuai dengan yang lebih besar dari, sama dengan, atau kurang dari.

c. CMP instruksi dapat diikuti oleh Jump bersyarat (Jcc) atau Set Con-
dition (SETcc) instruksi, di mana cc mengacu salah satu dari 16 kondisi yang tercantum dalam Tabel 12.12.
Menunjukkan bahwa kondisi diuji untuk perbandingan nomor ditandatangani sudah benar.

12.14 Misalkan kita ingin menerapkan x86 CMP instruksi 32-bit operan yang con-
nomor dirawat dengan seksama dalam format floating-point. Untuk hasil yang benar, persyaratan apa yang harus dipenuhi dalam
bidang berikut?
Sebuah. Posisi relatif dari bidang significand, tanda, dan eksponen.
b. Representasi dari nilai nol.
c. Representasi dari eksponen.
d. Apakah format IEEE memenuhi persyaratan ini? Menjelaskan.
12.15 Banyak mikroprosesor set instruksi termasuk instruksi yang menguji kondisi
dan menetapkan operan tujuan jika kondisi benar. Contohnya termasuk SETcc pada x86, yang Scc pada
MC68000 Motorola, dan Scond pada NS32000 Nasional.

Sebuah. Ada beberapa perbedaan antara petunjuk ini:


SETcc dan Scc beroperasi hanya pada byte, sedangkan Scond beroperasi pada byte, kata, dan operan
doubleword.
SETcc dan Scond mengatur operan ke integer satu jika benar dan nol jika palsu. Scc set byte untuk
semua orang biner jika benar dan semua nol jika palsu. Apa keuntungan relatif dan kerugian dari
perbedaan-perbedaan ini?
b. Tak satu pun dari petunjuk ini mengatur salah satu bendera kode kondisi, dan dengan demikian eksplisit
uji hasil instruksi yang diperlukan untuk menentukan nilainya. Mendiskusikan apakah kode kondisi
harus ditetapkan sebagai hasil dari instruksi ini.
c. Sebuah pernyataan IF sederhana seperti IF a 7 b THEN dapat diimplementasikan dengan menggunakan
Metode representasi numerik, yaitu, membuat nilai Boolean nyata, sebagai lawan dari aliran kontrol metode,
yang merupakan nilai dari ekspresi Boolean oleh titik dicapai dalam program ini. Sebuah kompiler
mungkin menerapkan JIKA sebuah 7 ssb KEMUDIAN dengan kode x86 berikut:

SUB CX, CX; mengatur mendaftar CX ke 0


MOV AX, B ; Memindahkan isi dari lokasi B untuk mendaftar AX
CMP AX, A; membandingkan isi register AX dan lokasi A Jle
UJI ; Melompat jika A ... B
INC CX ; Tambahkan 1 ke isi register CX
UJI JCXZ OUT ; Melompat jika isi CX sama 0
KEMUDIAN DI LUAR

Hasil (A 7 B) adalah nilai Boolean diadakan di register dan tersedia di kemudian hari, di luar konteks aliran
kode hanya ditampilkan. Hal ini nyaman untuk digunakan mendaftar CX untuk ini, karena banyak cabang
dan loop opcodes memiliki tes built-in untuk CX.

Tampilkan implementasi alternatif menggunakan instruksi SETcc yang menyimpan memori dan waktu
pelaksanaan. ( Petunjuk: Tidak ada instruksi x86 baru tambahan diperlukan, selain SETcc tersebut.)

d. Sekarang perhatikan pernyataan bahasa tingkat tinggi:

A: = (B 7 C) OR (D = F)
12,7 / ISTILAH KUNCI, PERTANYAAN REVIEW, DAN MASALAH 445

Sebuah compiler mungkin akan menghasilkan kode berikut:

MOV EAX, B ; Memindahkan isi dari lokasi B untuk mendaftar EAX


CMP EAX, C ; Membandingkan isi register EAX dan lokasi C
MOV BL, 0 ; 0 mewakili palsu
jle N1 ; Melompat jika (B ... C)
MOV BL, 1 ; 1 mewakili palsu
N1 MOV EAX, D CMP
EAX, F
MOV BH, 0 JNE
N2
MOV BH, 1 N2
ATAU BL, BH

Tampilkan implementasi alternatif menggunakan instruksi SETcc yang menyimpan memori dan waktu pelaksanaan.

12.16 Misalkan dua register mengandung nilai-nilai heksadesimal berikut: AB0890C2,


4598EE50. Apa hasil dari menambahkan mereka menggunakan instruksi MMX:
Sebuah. untuk byte dikemas
b. untuk kata dikemas

Asumsikan saturasi aritmatika tidak digunakan.


12.17 Lampiran O menunjukkan bahwa tidak ada petunjuk tumpukan berorientasi dalam set instruksi
jika stack akan digunakan hanya oleh prosesor untuk tujuan seperti penanganan prosedur. Bagaimana prosesor dapat
menggunakan tumpukan untuk tujuan apapun tanpa petunjuk tumpukan berorientasi?

12.18 Mengkonversi rumus berikut dari terbalik Polandia ke infiks:


Sebuah. AB + C + D *
b. AB / CD / +
c. ABCDE + * * /
d. ABCDE + F / + G - H / * +
12.19 Mengkonversi rumus berikut dari infiks untuk membalikkan Polandia:
Sebuah. A + B + C + D + E
b. ( A + B) * (C + D) + E
c. ( SEBUAH * B) + (C * D) + E
d. ( SEBUAH - B) * (((C - D * E) / F) / G) * H
12.20 Mengkonversi ekspresi A + B - C untuk notasi postfix menggunakan algoritma Dijkstra.
Menunjukkan langkah-langkah yang terlibat. Apakah hasilnya sama dengan (A + B) - C atau A + (B - C)? Apakah itu penting?

12.21 Menggunakan algoritma untuk mengkonversi infiks untuk postfix didefinisikan dalam Lampiran O, menunjukkan
langkah-langkah yang terlibat dalam mengkonversi ekspresi Gambar O.3 ke postfix. Gunakan tion presenta- mirip dengan Gambar
O.5.

12.22 Tampilkan perhitungan ekspresi dalam Gambar O.5, menggunakan presentasi yang mirip dengan
Gambar O.4.

12.23 Redraw tata letak little-endian pada Gambar 12.13 sehingga byte muncul sebagai bernomor
dalam tata letak big-endian. Artinya, acara memori 64-bit baris, dengan byte terdaftar kiri ke kanan, atas ke
bawah.
12.24 Untuk struktur data sebagai berikut, menggambar layout big-endian dan little-endian, menggunakan
format Gambar 12.13, dan komentar pada hasil.
Sebuah. struct {
dua kali lipat i; // 0x1112131415161718
} S1;
b. struct {
int i; // 0x11121314
int j; // 0x15161718
} S2;
446 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

c. struct {
i pendek; // 0x1112
singkat j; // 0x1314 k
singkat; // 0x1516
singkat l; // 0x1718
} S3;

12,25 IBM arsitektur Daya spesifikasi tidak mendikte bagaimana prosesor harus im-
plement modus little-endian. Ini hanya menentukan pandangan memori prosesor harus memiliki ketika beroperasi dalam
mode little-endian. Ketika mengkonversi struktur data dari endian besar untuk little endian, prosesor bebas untuk
menerapkan mekanisme byte-swapping benar atau menggunakan semacam mekanisme modifikasi alamat. prosesor Daya
saat ini adalah semua standar mesin big-endian dan menggunakan modifikasi alamat untuk memperlakukan data sebagai
little-endian.
Mempertimbangkan struktur s didefinisikan pada Gambar 12.13. Tata letak di bagian kanan bawah gambar
menunjukkan struktur s seperti yang terlihat oleh prosesor. Bahkan, jika struktur dikompilasi dalam mode little-endian,
tata letak dalam memori ditunjukkan pada Gambar 12.12. Jelaskan pemetaan yang terlibat, menjelaskan cara mudah
untuk menerapkan pemetaan, dan membahas tiga efektivitas pendekatan ini.

12,26 Menulis sebuah program kecil untuk menentukan endianness dari mesin dan melaporkan hasil.
Jalankan program pada komputer yang tersedia untuk Anda dan menyerahkan output.

12,27 MIPS prosesor dapat diatur untuk beroperasi baik big-endian atau mode little-endian.
Pertimbangkan Beban Byte Unsigned (LBU) instruksi, yang beban byte dari memori ke dalam orde
rendah 8 bit register dan mengisi high-order 24 bit dari register dengan nol. Deskripsi LBU diberikan
dalam manual MIPS referensi menggunakan bahasa daftar transfer sebagai

mem d LoadMemory (...) byte d VirtualAddress


1..0

jika KONDISI kemudian


GPR [rt] d 0 24} mem 31-8 * byte .. 24-8 * byte
lain
GPR [rt] d 0 24} mem 7 + 8 * byte .. 8 * byte
berakhir jika

dimana byte mengacu pada dua low-order bit dari alamat efektif dan mem mengacu pada nilai diambil
dari memori. Di manual, bukan KONDISI kata, salah satu dari dua kata berikut digunakan: BigEndian,
LittleEndian. Yang kata digunakan?
12,28 Kebanyakan, tetapi tidak semua, prosesor menggunakan besar-atau little-endian bit pemesanan dalam byte yang
konsisten dengan memesan besar-atau little-endian byte dalam skalar multibyte. Biarkan kami

pemetaan alamat little-endian


alamat
byte 00 11 12 13 14
00 01 02 03 04 05 06 07
21 22 23 24 25 26 27 28
08 08 09 0A 0B 0C 0D 0E 0F
'D' 'C' 'B' 'A' 31 32 33 34
10 10 11 12 13 14 15 16 17
51 52 'F' 'E' 'G'
18 18 19 1A 1B 1C 1D 1E 1F
61 62 63 64
20 20 21 22 23 24 25 26 27

Gambar 12.12 Power Arsitektur Struktur


Sedikit-Endian dalam Memori
LAMPIRAN 12A sedikit-, besar-, DAN BI-endian 447

mempertimbangkan Motorola 68030, yang menggunakan big-endian byte pemesanan. Dokumentasi dari 68.030 mengenai format
membingungkan. manual pengguna menjelaskan bahwa bit pemesanan bidang bit adalah kebalikan dari bit pemesanan bilangan
bulat. Sebagian besar operasi bit bidang beroperasi dengan satu endian pemesanan, tetapi beberapa operasi bit lapangan
membutuhkan pemesanan berlawanan. Berikut ini penjelasan dari manual pengguna menggambarkan sebagian besar operasi bit
bidang:

Sebuah operan bit ditentukan oleh alamat dasar yang memilih satu byte dalam memori (dasar byte),
dan sejumlah bit yang memilih satu bit dalam byte ini. Bit yang paling signifikan adalah sedikit tujuh.
Sebuah operan bit bidang ditentukan oleh: ( 1) alamat dasar yang memilih satu byte dalam memori; ( 2) bidang
bit offset yang menunjukkan paling kiri (base) sedikit bidang bit dalam kaitannya dengan bit yang
paling signifikan dari dasar byte; dan ( 3) bidang lebar bit yang menentukan berapa banyak bit ke kanan
basis byte di bidang bit. Bit yang paling signifikan dari dasar byte agak bidang offset 0, bit paling
signifikan dari dasar byte adalah bidang bit diimbangi 7.

Apakah petunjuk ini menggunakan big-endian atau little-endian bit pemesanan?

LAMPIRAN 12A sedikit-, besar-, DAN BI-endian

Sebuah fenomena yang mengganggu dan ingin tahu berkaitan dengan bagaimana byte dalam kata dan bit dalam
byte keduanya dirujuk dan mewakili. Kita melihat pertama pada masalah byte pemesanan dan kemudian
menganggap bahwa bit.

byte Ordering
Konsep endianness pertama kali dibahas dalam literatur oleh Cohen [COHE81]. Sehubungan dengan byte,
endianness harus dilakukan dengan urutan byte nilai-nilai skalar multibyte. Isu ini terbaik diperkenalkan
dengan sebuah contoh. Misalkan kita memiliki 32-bit nilai heksadesimal 12345678 dan bahwa itu disimpan
dalam sebuah kata 32-bit dalam memori byte-addressable di lokasi byte 184. Nilai ini terdiri dari 4 byte,
dengan byte paling signifikan yang berisi nilai 78 dan paling byte signifikan mengandung nilai 12. Ada dua
cara yang jelas untuk menyimpan nilai ini:

alamat Nilai alamat Nilai

184 12 184 78

185 34 185 56

186 56 186 34

187 78 187 12

Pemetaan di toko meninggalkan byte paling signifikan dalam alamat byte numerik terendah; ini dikenal sebagai big
endian dan setara dengan kiri-ke-kanan urutan menulis dalam bahasa budaya Barat. Pemetaan di toko sebelah
kanan byte paling signifikan di alamat byte numerik terendah; ini dikenal sebagai little endian dan mengingatkan
pada urutan yang benar-ke-kiri dari operasi aritmatika di unit aritmatika. 3 Untuk nilai skalar multibyte diberikan,
endian besar dan kecil endian adalah pemetaan byte-terbalik satu sama lain.

3 istilah big endian dan little endian berasal dari Bagian I, Bab 4 dari Jonathan Swift Perjalanan si Gulliver.
Mereka merujuk pada perang agama antara dua kelompok, salah satu yang memecah telur di ujung besar dan yang lainnya yang memecah telur di ujung
kecil.
448 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Konsep endianness muncul ketika perlu untuk mengobati badan multiple-byte sebagai item data
tunggal dengan satu alamat, meskipun itu terdiri dari unit beralamat lebih kecil. Beberapa mesin,
seperti Intel 80x86, x86, VAX, dan Alpha, adalah mesin little-endian, sedangkan yang lain, seperti IBM
System 370/390, Motorola 680x0, Sun SPARC, dan sebagian besar mesin RISC, yang endian besar.
Ini menyajikan masalah ketika data ditransfer dari mesin dari satu jenis endian ke yang lain dan ketika
programmer mencoba untuk memanipulasi byte individu atau bit dalam skalar multibyte.

Milik endianness tidak melampaui unit data individu. Dalam setiap mesin, agregat seperti file,
struktur data, dan array terdiri dari beberapa unit data, masing-masing dengan endianness. Dengan
demikian, konversi blok memori dari satu gaya endianness ke yang lain membutuhkan pengetahuan
tentang struktur data.
Gambar 12.13 menggambarkan bagaimana endianness menentukan pengalamatan dan urutan byte.
Struktur C di atas berisi sejumlah tipe data. Tata letak memori di bawah hasil kiri dari kompilasi bahwa struktur
untuk mesin big-endian, dan bahwa di kanan bawah untuk mesin little-endian. Dalam setiap kasus, memori
digambarkan sebagai rangkaian 64-bit baris. Untuk kasus big-endian, memori biasanya adalah di lihat kiri ke
kanan, atas ke bawah, sedangkan untuk kasus little-endian, memori biasanya dipandang sebagai kanan ke
kiri, atas ke bawah. Perhatikan bahwa layout ini sewenang-wenang. Entah skema bisa menggunakan baik kiri
ke kanan atau kanan ke kiri dalam berturut-turut; ini adalah masalah penggambaran, bukan tugas memori.
Bahkan, dalam melihat manual programmer untuk berbagai mesin, koleksi membingungkan penggambaran
dapat ditemukan, bahkan dalam manual yang sama.

struct {
int Sebuah; // 0x1112_1314 kata
int bantalan; //
ganda b; // 0x2122_2324_2526_2728 doubleword
arang* c; // 0x3132_3334 kata
arang d [7]; //'A'.'B','C','D','E','F','G' array byte
pendek e; // 0x5152 sindiran
int f; // 0x6162_6364 kata
} S;

pemetaan alamat big-endian pemetaan alamat little-endian


alamat alamat

byte 00 11 12 13 14 11 12 13 14 byte 00

00 01 02 03 04 05 06 07 07 06 05 04 03 02 01 00

21 22 23 24 25 26 27 28 21 22 23 24 25 26 27 28

08 08 09 0A 0B 0C 0D 0E 0F 0F 0E 0D 0C 0B 0A 09 08 08

31 32 33 34 'B'
'SEBUAH' 'C' 'D' 'D' 'C' 'B' 'A' 31 32 33 34

10 10 11 12 13 14 15 16 17 17 16 15 14 13 12 11 10 10

'E' 'F' 'G' 51 52 51 52 'F' 'E' 'G'

18 18 19 1A 1B 1C 1D 1E 1F 1F 1E 1D 1C 1B 1A 19 18 18

61 62 63 64 61 62 63 64

20 20 21 22 23 23 22 21 20 20

Gambar 12.13 Misalnya C Struktur Data dan Its Endian Maps


LAMPIRAN 12A sedikit-, besar-, DAN BI-endian 449

Kita bisa membuat beberapa pengamatan tentang struktur data ini:

Setiap item data memiliki alamat yang sama di kedua skema. Sebagai contoh, alamat doubleword
dengan nilai heksadesimal 2122232425262728 adalah 08.
Dalam setiap diberikan nilai multibyte skalar, urutan byte dalam struktur littleendian adalah
kebalikan dari yang untuk struktur big-endian.
Endianness tidak mempengaruhi urutan item data dalam struktur. Dengan demikian, kata
empat-karakter c pameran byte reversal, namun tujuh karakter array byte d tidak. Oleh karena
itu, alamat setiap elemen individu d adalah sama di kedua struktur.

Pengaruh endianness yang mungkin lebih jelas ditunjukkan ketika kita melihat memori sebagai array vertikal
byte, seperti yang ditunjukkan pada Gambar 12.14.

00 11 00 14
12 13
13 12
14 11
04 04

08 21 08 28
22 27
23 26
24 25
0C 25 0C 24
26 23
27 22
28 21
10 31 10 34
32 33
33 32
34 31
14 'A' 14 'A'
'B' 'B'
'C' 'C'
'D' 'D'
18 'E' 18 'E'
'F' 'F'
'G' 'G'

1C 51 1C 52
52 51

20 61 20 64
62 63
63 62
64 61

(A) endian Big (B) endian Sedikit

Gambar 12.14 Lihat lain Gambar 12.13


450 BAB 12 / INSTRUKSI SETS: KARAKTERISTIK DAN FUNGSI

Tidak ada konsensus umum untuk yang gaya unggul endianness. 4


Poin-poin berikut mendukung gaya big-endian:

Karakter-string penyortiran: Sebuah prosesor big-endian lebih cepat dalam membandingkan string karakter
integeraligned; integer ALU dapat membandingkan beberapa byte secara paralel.

Desimal / IRA kesedihan: Semua nilai-nilai dapat dicetak kiri ke kanan tanpa menyebabkan kebingungan.

Agar konsisten: prosesor big-endian menyimpan bilangan bulat dan karakter string dalam urutan yang
sama (byte paling signifikan datang pertama). Poin-poin berikut mendukung gaya little-endian:

Sebuah prosesor big-endian harus melakukan penambahan ketika mengkonversi alamat integer 32-bit ke alamat
bilangan bulat 16-bit, untuk menggunakan byte paling signifikan.

Hal ini lebih mudah untuk melakukan yang lebih tinggi-presisi aritmatika dengan gaya
little-endian; Anda tidak perlu menemukan byte paling signifikan dan bergerak mundur. Perbedaan
yang kecil dan pilihan gaya endian sering lebih soal menampung mesin sebelumnya dari apa pun.

PowerPC adalah bi-endian prosesor yang mendukung kedua mode big-endian dan little-endian.
Arsitektur bi-endian memungkinkan pengembang perangkat lunak untuk memilih mode baik ketika
melakukan migrasi sistem operasi dan aplikasi dari mesin lain. Sistem operasi menetapkan modus endian
di mana proses mengeksekusi. Setelah modus yang dipilih, semua beban memori berikutnya dan toko
ditentukan oleh model memori-pengalamatan mode tersebut. Untuk mendukung fitur hardware ini, 2 bit
diselenggarakan dalam keadaan mesin register (MSR) yang dikelola oleh sistem operasi sebagai bagian
dari negara proses. Satu bit menentukan modus endian di mana kernel berjalan; yang lain menentukan
modus operasi prosesor saat ini. Dengan demikian, modus dapat diubah pada basis per-proses.

bit Pemesanan

Dalam memesan bit dalam byte, kita langsung dihadapkan dengan dua pertanyaan:

1. Apakah Anda menghitung bit pertama sebagai bit nol atau sebagai bit satu?

2. Apakah Anda menetapkan jumlah bit terendah untuk bit paling signifikan byte ini (sedikit
endian) atau byte bit paling signifikan (big endian)?

Pertanyaan-pertanyaan ini tidak dijawab dengan cara yang sama pada semua mesin. Memang,
pada beberapa mesin, jawaban yang berbeda dalam situasi yang berbeda. Selanjutnya, pilihan besar-atau
little-endian bit pemesanan dalam byte tidak selalu konsisten dengan memesan besar-atau little-endian
byte dalam skalar multibyte. pemrogram perlu khawatir dengan isu-isu ini ketika memanipulasi bit
individual.
Bidang lain yang menjadi perhatian adalah ketika data dikirimkan melalui jalur bit-serial. Ketika byte
individu ditransmisikan, apakah sistem mengirimkan bit yang paling signifikan pertama atau sedikit signifikan
pertama? Perancang harus memastikan bahwa bit masuk ditangani dengan benar. Untuk pembahasan
masalah ini, lihat [JAME90].

4 Nabi dihormati oleh kedua kelompok di Endian Perang perjalanan si Gulliver mengatakan ini. Semua Orang percaya sejati harus istirahat telur

mereka di Akhir nyaman. Tidak banyak membantu!

Anda mungkin juga menyukai