Elemen Instruksi Machine
instruksi Representasi
Jenis instruksi
Jumlah Alamat
Instruksi Set Desain
12.2 Jenis Operan
nomor
karakter
data yang logis
12.3 x86 Intel dan Jenis Data ARM
Jenis x86 data
Jenis Data ARM
12.4 Jenis Operasi
Transfer data
Hitung
Logis
Konversi
Input output
Sistem Kontrol
Transfer Kontrol
12.5 Jenis Intel x86 dan ARM Operasi
Jenis x86 Operasi
Jenis ARM Operasi
12.6 Direkomendasikan Membaca
12.7 Syarat Key, Ulasan Pertanyaan, dan Masalah
Lampiran 12A sedikit-, besar-, 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, sepertisebagai Pascal atau Ada, sangat sedikit dari arsitektur mesin yang mendasari terlihat.
Satu batas di mana desainer komputer dan programmer komputerdapat melihat mesin yang sama adalah mesin set instruksi. Dari sudut perancangpandang, mesin set instruksi memberikan persyaratan fungsional untukprosesor: menerapkan prosesor adalah tugas yang sebagian besar melibatkan menerapkaninstruksi mesin ditetapkan. Pengguna yang memilih untuk program di mesinbahasa (sebenarnya, dalam bahasa assembly; lihat Lampiran B) menjadi sadar akanmendaftar dan struktur memori, jenis data langsung didukung oleh mesin,dan fungsi ALU.
Sebuah deskripsi instruksi mesin komputer set pergi jauh ke arahmenjelaskan prosesor komputer. Dengan demikian, kita fokus pada instruksi mesindalam bab ini dan berikutnya.
12.1 KARAKTERISTIK MESIN INSTRUKSI
Operasi prosesor ditentukan oleh instruksi dijalankan,
disebut sebagai instruksi mesin atau instruksi komputer. Koleksi yang berbeda
instruksi bahwa prosesor dapat mengeksekusi disebut sebagai prosesor
set instruksi.
Elemen Instruksi Mesin
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 instruksi
pelaksanaan dan, dengan implikasi, mendefinisikan elemen dari instruksi mesin. Ini
elemen 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.
• Referensi Sumber operan: Operasi mungkin melibatkan satu atau lebih sumber
operan, yaitu, operan yang masukan untuk operasi.
• Referensi Hasil operan: Operasi mungkin menghasilkan hasil.
• Berikutnya instruksi referensi: Ini memberitahu prosesor mana untuk mengambil berikutnya
instruksi setelah pelaksanaan instruksi ini selesai.
Alamat dari instruksi berikutnya yang akan diambil bisa berupa alamat nyata
atau alamat virtual, tergantung pada arsitektur. Umumnya, perbedaan adalah
transparan untuk arsitektur set instruksi. Dalam kebanyakan kasus, instruksi berikutnya untuk
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 memori virtual harus disediakan. bentuk yang
alamat disediakan dibahas dalam Bab 13.
Sumber dan hasil operand dapat berada dalam salah satu dari empat bidang:
• Main atau memori virtual: Seperti dengan referensi instruksi berikutnya, utama atau virtual
alamat memori harus diberikan.
• Processor daftar: 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
setiap register diberikan sebuah nama yang unik atau nomor, dan instruksi harus
berisi jumlah register yang diinginkan.
• Segera: Nilai operan yang terkandung di lapangan dalam instruksi
dieksekusi.
• Perangkat I / O: Instruksi harus menentukan modul I / O dan perangkat untuk
operasi. Jika memori-dipetakan I / O yang digunakan, ini hanyalah utama atau virtual
alamat memori.
Instruksi Representasi
Dalam komputer, setiap instruksi diwakili oleh urutan bit. Itu
instruksi dibagi menjadi bidang, sesuai dengan unsur-unsur dari
petunjuk. Contoh sederhana dari format instruksi ditunjukkan pada Gambar 12.2. Sebagai
contoh lain, IAS Format instruksi ditunjukkan pada Gambar 2.2. dengan sebagian besar
set instruksi, lebih dari satu format yang digunakan. Selama eksekusi instruksi, sebuah
instruksi dibaca ke dalam register instruksi (IR) dalam prosesor. prosesor
harus mampu mengekstrak data dari berbagai bidang instruksi untuk melakukan
diperlukan operasi.
Sulit bagi programmer dan pembaca buku untuk berurusan dengan
representasi biner dari instruksi mesin. praktek umum dengan demikian, telah menjadi
menggunakan representasi simbolis dari instruksi mesin. Contoh ini
digunakan untuk IAS set instruksi, pada Tabel 2.1.
Opcodes diwakili oleh singkatan, yang disebut mnemonik, yang menunjukkan
operasi. Contoh umum termasuk
ADD Tambahkan
Kurangi SUB
MUL Multiply
DIV Divide
LOAD Beban data dari memori
Data Stor Store untuk memori
Operan juga diwakili secara simbolis. Misalnya, instruksi
ADD R, Ymungkin berarti menambahkan nilai yang terkandung dalam data lokasi Y ke isi register R.
Dalam contoh ini, Y mengacu pada alamat dari lokasi di memori, dan R mengacu pada
daftar 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 menspesifikasikan programmer
lokasi masing-masing operan simbolis. Misalnya, programmer mungkin
dimulai dengan daftar definisi:
X = 513
Y = 514
dan seterusnya. Sebuah program sederhana akan menerima input simbolik ini, mengkonversi opcodes dan
operand referensi untuk bentuk biner, dan membangun instruksi mesin biner.
programmer bahasa mesin jarang 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 simbolis tetap
alat yang berguna untuk menggambarkan instruksi mesin, dan kami akan menggunakannya untuk tujuan itu.
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
disimpan dalam X dan menempatkan hasil di X. Bagaimana mungkin ini dicapai dengan mesin
petunjuk? Mari kita asumsikan bahwa variabel X dan Y sesuai dengan lokasi 513
dan 514. Jika kita mengasumsikan set instruksi sederhana mesin, operasi ini bisa menjadi
dicapai dengan tiga instruksi:
1. Masukkan register dengan isi lokasi memori 513.
2. Tambahkan isi dari lokasi memori 514 untuk register.
3. Menyimpan isi register di lokasi memori 513.
Seperti dapat dilihat, instruksi DASAR tunggal mungkin membutuhkan tiga mesin
instruksi. Ini adalah khas dari hubungan antara bahasa tingkat tinggi dan
bahasa mesin. Sebuah bahasa tingkat tinggi mengungkapkan operasi dalam aljabar ringkas
membentuk, menggunakan variabel. Sebuah bahasa mesin mengungkapkan operasi di dasar
membentuk melibatkan pergerakan data ke atau dari register.
Dengan contoh sederhana ini untuk membimbing kita, mari kita mempertimbangkan jenis instruksi
yang harus dimasukkan dalam komputer praktis. Sebuah komputer harus memiliki satu set
instruksi yang memungkinkan pengguna untuk merumuskan setiap tugas pengolahan data. Cara lain
untuk melihatnya adalah dengan mempertimbangkan kemampuan bahasa pemrograman tingkat tinggi. Apa saja
program yang ditulis dalam bahasa tingkat tinggi harus diterjemahkan ke dalam bahasa mesin
akan 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: Gerakan data masuk atau keluar dari daftar dan atau memori
lokasi
• Gerakan Data: I / O petunjuk
• Control: Test dan cabang instruksi
instruksi aritmatika memberikan kemampuan komputasi untuk pemrosesan
Data numerik. Logika (Boolean) instruksi beroperasi pada bit kata sebagai bit
bukan sebagai nomor; 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 petunjuk memori untuk bergerak
data antara memori dan register. I / O instruksi yang diperlukan untuk mentransfer
program dan data ke dalam memori dan hasil perhitungan kembali keluar ke
pengguna. instruksi tes digunakan untuk menguji nilai dari kata data atau status
perhitungan. instruksi cabang kemudian digunakan untuk cabang untuk satu set yang berbeda dari
instruksi tergantung pada keputusan yang dibuat.
Kami akan memeriksa berbagai jenis instruksi secara lebih rinci nanti dalam hal ini
bab.
Jumlah Alamat
Salah satu cara tradisional untuk menggambarkan arsitektur prosesor adalah dalam haljumlah alamat yang terkandung dalam setiap instruksi. Dimensi ini telah menjadi kurangsignifikan dengan meningkatnya kompleksitas desain prosesor. Namun demikian,berguna pada saat ini untuk menarik dan menganalisis perbedaan ini.Berapa jumlah maksimum alamat yang mungkin perlu di sebuah 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 operand source). Dengan demikian, kita akan membutuhkan maksimal dua alamatuntuk referensi operan sumber. Hasil operasi harus disimpan, menyarankanalamat ketiga, yang mendefinisikan operan tujuan. Akhirnya, setelah selesai dariinstruksi, instruksi berikutnya harus diambil, dan alamat yang dibutuhkan.baris ini penalaran menunjukkan bahwa instruksi bisa masuk akal diperlukanmengandung empat referensi alamat: dua operan sumber, salah satu operan tujuan,dan alamat dari instruksi berikutnya. Dalam kebanyakan arsitektur, sebagian besar instruksi memilikisatu, dua, atau tiga alamat operand, dengan alamat dari instruksi berikutnya yangimplisit (diperoleh dari program counter). Kebanyakan arsitektur juga memiliki beberapainstruksi tujuan khusus dengan lebih operan. Misalnya, beban dan menyimpanbeberapa instruksi dari arsitektur ARM, dijelaskan pada Bab 13, menunjuksampai 17 operan mendaftar di sebuah instruksi.Gambar 12.3 membandingkan instruksi satu, dua, dan tiga alamat khas yangdapat digunakan untuk menghitung Y = (A - B)> [C + (D * E)]. Dengan tiga alamat,setiap instruksi menetapkan dua lokasi sumber operan dan operan tujuanlokasi. Karena kita memilih untuk tidak mengubah nilai salah satu lokasi operan,lokasi sementara, T, digunakan untuk menyimpan beberapa hasil antara. Perhatikan bahwa adaempat instruksi dan bahwa ekspresi asli memiliki lima operan.
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 dua dan tiga alamat
instruksi.
Desain trade-off yang terlibat dalam memilih jumlah alamat per instruksi
dipersulit oleh faktor-faktor lain. Ada masalah apakah sebuah referensi alamat
lokasi memori atau register. Karena ada sedikit register, lebih sedikit bit
diperlukan untuk referensi mendaftar. Juga, seperti yang akan kita lihat dalam Bab 13, mesin
mungkin menawarkan berbagai mode pengalamatan, dan spesifikasi dari modus mengambil satu atau
lebih banyak bit. Hasilnya adalah bahwa sebagian besar desain prosesor melibatkan berbagai instruksi
format.
Instruksi Set Desain
Salah satu aspek yang paling menarik, dan paling dianalisis, desain komputer
set instruksi desain. Desain set instruksi sangat kompleks karena
mempengaruhi begitu banyak aspek dari sistem komputer. Set instruksi mendefinisikan banyak
dari fungsi yang dilakukan oleh prosesor dan tentunya memiliki dampak yang signifikan terhadap
pelaksanaan prosesor. Set instruksi adalah cara programmer dari
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
operasi kompleks 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: Modus atau mode dimana alamat operan adalah
ditentukan
Isu-isu ini sangat saling terkait dan harus dipertimbangkan bersama-sama dalam merancang
instruksi set. 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
set instruksi desain. Berikut bagian gambaran ini, bab ini menguji data
jenis dan operasi repertoar. Bab 13 membahas mode pengalamatan (yang
termasuk pertimbangan register) dan format instruksi. Bab 15 meneliti
mengurangi set instruksi komputer (RISC). arsitektur RISC menimbulkan pertanyaan
banyak set instruksi keputusan desain tradisional dibuat di komersial
komputer.
12.2 JENIS operan
Instruksi mesin beroperasi pada data. Kategori umum yang paling penting dari
data
• Addresses
• Numbers
• Characters
• Logical data
Kita akan melihat, dalam membahas mode pengalamatan dalam Bab 13, yang alamat
, pada kenyataannya, bentuk data. Dalam banyak kasus, beberapa perhitungan harus dilakukan pada
referensi operan dalam instruksi untuk menentukan memori utama atau virtual
alamat. Dalam konteks ini, alamat dapat dianggap unsigned integer.
Lainnya tipe data umum adalah angka, karakter, dan data logis, dan masing-masing
ini diperiksa secara singkat di bagian ini. Di luar itu, beberapa mesin mendefinisikan khusus
jenis data 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 dan angka biasa
disimpan dalam komputer adalah bahwa yang terakhir terbatas. Hal ini berlaku dalam dua pengertian.
Pertama, ada batas dengan 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, overflow,
dan underflow.
Tiga jenis data numerik yang umum di komputer:
• bilangan bulat Binary atau titik tetap biner
• floating point Binary
• Decimal
Kami memeriksa dua yang pertama dalam beberapa detail pada Bab 10. Ini masih mengatakan beberapa
kata tentang angka desimal.
Meskipun semua operasi komputer internal biner di alam, manusia
pengguna 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, relatif
perhitungan sederhana, adalah lebih baik untuk menyimpan dan beroperasi pada angka-angka dalam desimal
bentuk. representasi yang paling umum untuk tujuan ini dikemas desimal.
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, tapi menghindari konversi
atas. angka negatif dapat direpresentasikan oleh termasuk tanda 4-bit
digit di kedua ujung kiri atau kanan dari string digit desimal dikemas. Standard tanda
nilai-nilai 1100 untuk positif (+) dan 1101 untuk negatif (-).
Banyak mesin memberikan petunjuk aritmatika untuk melakukan operasi
langsung pada angka desimal dikemas. Algoritma yang sangat mirip dengan
dijelaskan dalam Bagian 9.3 tapi harus memperhitungkan desimal carry operasi.
Karakter
Bentuk umum dari data teks atau karakter string. Sementara data tekstual yang palingnyaman bagi manusia, mereka tidak bisa, dalam bentuk karakter, dengan mudah disimpan atauditularkan oleh pengolahan data dan sistem komunikasi. Sistem seperti inidirancang untuk data biner. Dengan demikian, sejumlah kode telah dirancang oleh karakter yangdiwakili oleh urutan bit. Mungkin contoh umum awalini adalah kode Morse. Hari ini, kode karakter yang paling umum digunakan dalamInternational Reference Alphabet (IRA), disebut di Amerika Serikat sebagaiAmerican Standard Kode untuk Informasi Interchange (ASCII; lihat Lampiran F).Setiap karakter dalam kode ini diwakili oleh pola 7-bit yang unik; dengan demikian, 128 yang berbedakarakter dapat diwakili. Ini adalah jumlah yang lebih besar dari yang diperlukan untukmewakili karakter yang dapat dicetak, dan beberapa pola mewakili karakter kontrol.Beberapa karakter kontrol ini harus dilakukan dengan mengendalikan pencetakankarakter pada halaman. Lainnya prihatin dengan prosedur komunikasi.IRA-dikodekan karakter yang hampir selalu disimpan dan dikirim menggunakan 8 bit perkarakter. Bit kedelapan mungkin diatur ke 0 atau digunakan sebagai bit paritas untuk mendeteksi kesalahan.Dalam kasus terakhir, bit diatur sedemikian rupa sehingga total jumlah 1s biner di setiap oktetselalu ganjil (aneh paritas) atau selalu bahkan (paritas genap).Catatan pada Tabel F.1 (Lampiran F) bahwa untuk bit pola IRA 011XXXX, yangangka 0 sampai 9 diwakili oleh setara biner mereka, 0000 melalui 1001, dipaling kanan 4 bit. Ini adalah kode yang sama seperti desimal dikemas. Ini memfasilitasi konversiantara 7-bit IRA dan 4-bit dikemas representasi desimal.kode lain yang digunakan untuk mengkodekan karakter adalah diperpanjang Binary CodedDesimal Interchange Code (EBCDIC). EBCDIC digunakan pada mainframe IBM. Saya tadalah kode 8-bit. Seperti IRA, EBCDIC kompatibel dengan desimal dikemas. Dikasus EBCDIC, kode 11110000 melalui 11111001 mewakili digit0 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 unit n-bit sebagai
yang terdiri dari n item 1-bit data, setiap item memiliki nilai 0 atau 1. Bila data
melihat cara ini, mereka dianggap data logis.
Ada dua keuntungan ke tampilan bit-oriented. Pertama, kita mungkin kadang-kadang berharap
untuk menyimpan array Boolean atau item data biner, di mana setiap item dapat mengambil hanya
nilai 1 (benar) dan 0 (false). Dengan data logis, memori dapat digunakan secara efisien
untuk penyimpanan ini. Kedua, ada saat-saat kita ingin memanipulasi bit dari
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 dalamstruktur data dan pemanfaatan memori efisien, kata tidak perlu selaras pada evennumberedalamat; doublewords tidak perlu selaras pada alamat merata dibagioleh 4; dan quadwords tidak perlu selaras pada alamat dibagi secara merata 8; dansebagainya. Namun, ketika data diakses di bus 32-bit, transfer data mengambilmenempatkan dalam satuan doublewords, mulai dari alamat habis dibagi 4. Prosesormengubah permintaan untuk nilai-nilai sejajar ke urutan permintaan untuk bustransfer. Seperti dengan semua mesin Intel 80x86, x86 menggunakan gaya little-endian;yaitu, byte paling signifikan disimpan dalam alamat terendah (lihat Lampiran 12Auntuk diskusi tentang endianness).
Byte, kata, doubleword, quadword, dan quadword ganda disebutsebagai tipe data umum. Selain itu, x86 mendukung jajaran tertentujenis data yang diakui dan dioperasikan oleh instruksi tertentu. tabel 12.2merangkum jenis.
Gambar 12.4 mengilustrasikan x86 tipe data numerik. bilangan bulat yang ditandatangani berada dimelengkapi representasi berpasangan dan mungkin 16, 32, atau 64 bit panjang. floatingpoint yangketik sebenarnya mengacu pada satu set jenis yang digunakan oleh unit floating-pointdan dioperasikan oleh instruksi floating-point. Tiga representasi floating-pointsesuai dengan standar IEEE 754.
SIMD dikemas (single-instruksi-multiple-data) tipe data diperkenalkanuntuk arsitektur x86 sebagai bagian dari perluasan dari set instruksi untukmengoptimalkan kinerja aplikasi multimedia. ekstensi ini termasuk MMX(Ekstensi multimedia) dan SSE (Streaming SIMD ekstensi). Konsep dasaradalah bahwa beberapa operan yang dikemas ke dalam item memori tunggal direferensikan dan bahwaini beberapa operan dioperasikan secara paralel. Tipe data adalah sebagai berikut:
• Dikemas byte dan dikemas byte integer: Bytes dikemas ke dalam quadword 64-bit atau
128-bit ganda quadword, diartikan sebagai bidang bit atau sebagai integer
• Dikemas kata dan kata dikemas integer: 16-bit kata-kata dikemas ke dalam quadword 64-bit
atau 128-bit ganda quadword, diartikan sebagai bidang bit atau sebagai integer
• Dikemas doubleword dan dikemas doubleword integer: 32-bit doublewords
dikemas dalam quadword 64-bit atau 128-bit quadword ganda, ditafsirkan sebagai
bidang bit atau sebagai integer
• quadword Dikemas dan dikemas qaudword integer: Dua 64-bit quadwords
dikemas dalam quadword ganda 128-bit, ditafsirkan sebagai bidang bit atau sebagai integer
• Dikemas presisi tunggal floating-point dan dikemas floatingpoint presisi ganda:
Empat 32-bit floating-point atau dua 64-bit floating-point nilai dikemas
menjadi quadword ganda 128-bit
Jenis Data ARM
prosesor ARM mendukung jenis data 8 (byte), 16 (sindiran), dan 32 (kata) bit
panjangnya. Biasanya, akses sindiran harus sindiran selaras dan kata mengakses
harus kata selaras. Untuk akses upaya nonblok, mendukung arsitektur
tiga alternatif.
• kasus default:
alamat diperlakukan sebagai terpotong, dengan alamat bit [1: 0] diperlakukan sebagai zero
untuk kata mengakses, dan alamat bit [0] diperlakukan sebagai nol untuk sindiran mengakses.
instruksi ARM beban kata tunggal arsitektur didefinisikan untuk memutar kanan• Memeriksa Keselarasan: Ketika bit kontrol yang tepat diatur, data batalkan sinyal
data kata-blok ditransfer oleh alamat non kata-blok satu, dua, atau
tiga byte tergantung pada nilai dari dua setidaknya alamat bit signifikan.
menunjukkan kesalahan keselarasan untuk mencoba akses teralign.
• Akses teralign: Bila opsi ini diaktifkan, prosesor menggunakan satu atau lebih
mengakses memori 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. Semua
tiga tipe data juga dapat digunakan untuk berpasangan melengkapi bilangan bulat ditandatangani.
Mayoritas implementasi prosesor ARM tidak memberikan floatingpoint
hardware, 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 single dan double-presisi
mengambang tipe data titik didefinisikan dalam IEEE 754.
DUKUNGAN Endian Sedikit negara (E-bit) dalam sistem kontrol daftar 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 terkait
dengan E-bit untuk beban kata atau toko operasi. Mekanisme ini memungkinkan efisien
beban data dinamis / toko untuk perancang sistem yang tahu mereka perlu untuk mengakses data
struktur 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 berbeda bervariasi dari mesin ke mesin. Namun,
jenis umum yang sama operasi ditemukan pada semua mesin. A berguna dan khas
kategorisasi adalah sebagai berikut:
• Transfer data
• Arithmetic
• Logical
• Konversi
• I / O
• Kontrol Sistem
• Transfer kontrol
Tabel 12.3 (berdasarkan [HAYE98]) berisi 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
jenis tertentu dari operasi (dirangkum dalam Tabel 12.4). Topik terakhir ini diperiksa
secara lebih rinci dalam Bab 14.
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 dapat memori,
register, atau bagian atas tumpukan. Kedua, panjang data yang akan ditransfer harus
ditunjukkan. Ketiga, karena dengan semua instruksi dengan operan, mode pengalamatan
untuk setiap operan harus ditentukan. Poin terakhir ini dibahas dalam Bab 13.
Pilihan instruksi transfer data untuk menyertakan dalam sebuah set instruksi mencontohkan
jenis trade-off desainer harus membuat. Sebagai contoh, umum
Lokasi (memori atau register) dari operan dapat diindikasikan baik spesifikasi
dari opcode atau operan. Tabel 12.5 menunjukkan contoh yang paling umum
IBM EAS / 390 instruksi transfer data. Perhatikan bahwa ada varian untuk menunjukkan
jumlah data yang ditransfer (8, 16, 32, atau 64 bit). Juga, ada yang berbedapetunjuk untuk mendaftar untuk mendaftar, daftar ke memori, memori untuk mendaftar, danmemori untuk transfer memori. Sebaliknya, VAX memiliki langkah (MOV) instruksidengan varian untuk jumlah yang berbeda dari data yang akan dipindahkan, tetapi menentukan apakahoperan adalah register atau memori sebagai bagian dari operan. VAX Pendekatan agakmudah bagi programmer, yang memiliki mnemonik lebih sedikit untuk menangani. Namun,itu juga agak kurang kompak daripada IBM EAS / 390 pendekatan karena lokasi(Daftar vs memori) dari setiap operan harus ditentukan secara terpisah dipetunjuk. Kami akan kembali ke perbedaan ini ketika kita membahas format instruksi diBab 13.Dalam hal tindakan prosesor, operasi transfer data mungkin adalah yang paling sederhanamengetik. Jika kedua sumber dan tujuan yang register, maka prosesor hanya menyebabkandata yang akan ditransfer dari satu mendaftar ke yang lain; ini adalah operasi internal untukprosesor. Jika salah satu atau kedua operan dalam memori, maka prosesor harus melakukanbeberapa 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 untuk memori nyata
alamat.
3. Tentukan apakah item dibenahi adalah dalam cache.
4. Jika tidak, mengeluarkan perintah untuk modul memori.
Hitung
Kebanyakan mesin menyediakan operasi aritmatika dasar menambah, mengurangi, mengalikan,
dan membagi. Ini selalu disediakan untuk integer ditandatangani (fixed-point)
angka. Seringkali mereka juga disediakan untuk floating-point dan desimal dikemas
angka.
Operasi lain yang mungkin termasuk berbagai instruksi single-operan; untuk
contoh,
• Absolute: Ambil 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
untuk posisi operan untuk input ke ALU, dan untuk memberikan output dari
ALU. Gambar 3.5 menggambarkan gerakan yang terlibat dalam transfer data dan aritmatika
operasi. Selain itu, tentu saja, bagian ALU prosesor melakukan
operasi yang diinginkan.
Logis
Kebanyakan mesin juga menyediakan berbagai operasi untuk memanipulasi bit individual
dari kata atau unit beralamat lain, sering disebut sebagai "sedikit memutar-mutar." Mereka
berdasarkan 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 Exclusive-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.
Dengan demikian, jika dua register berisi data
(R1) = 10100101
(R2) = 00001111
lalu
(R1) AND (R2) = 00000101
dimana notasi (X) berarti isi dari lokasi X. Dengan demikian, operasi AND
dapat digunakan sebagai masker yang memilih bit tertentu dalam kata dan angka nol keluar sisanya
bit. Sebagai contoh lain, jika dua register berisi
(R1) = 10100101
(R2) = 11111111
lalu
(R1) XOR (R2) = 01011010
Dengan satu kata diatur ke semua 1s, operasi XOR membalikkan semua bit yang lain
kata (yang pelengkap).
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, bit
bergeser keluar hilang. Pada ujung yang lain, sebuah 0 digeser di. Shift Logical berguna terutama
untuk mengisolasi bidang dalam kata. 0s yang bergeser menjadi menggusur kata
informasi yang tidak diinginkan yang digeser dari ujung lainnya.
Sebagai contoh, misalkan kita ingin mengirimkan karakter data ke I / O
perangkat 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. Masukkan kata ke dalam register.
2. Pergeseran 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 sebelah kanan yang
karakter,
1. Masukkan kata lagi ke register.
2. DAN dengan 0000000011111111. ini masker keluar karakter di sebelah kiri.
3. Lakukan I / O.
Operasi pergeseran aritmatika memperlakukan data sebagai integer ditandatangani dan tidaktidak menggeser bit tanda. Pada pergeseran aritmatika kanan, sedikit tanda direplikasi keposisi bit ke kanan. Pada pergeseran aritmatika kiri, pergeseran kiri logis dilakukan padasemua bit tapi sedikit tanda, yang ditahan. Operasi ini dapat mempercepat tertentuoperasi aritmatika. Dengan angka dalam notasi berpasangan melengkapi, aritmatika tepatbergeser bersesuaian untuk pembagian dengan 2, dengan pemotongan untuk angka ganjil. kedua suatuaritmatika meninggalkan shift dan pergeseran kiri yang logis sesuai dengan perkalian dengan 2 saattidak ada melimpah. Jika overflow terjadi, operasi aritmatika dan shift kiri logismenghasilkan hasil yang berbeda, tapi aritmatika meninggalkan pergeseran mempertahankan tanda nomor.Karena potensi melimpah, banyak prosesor tidak termasuk instruksi ini,termasuk PowerPC dan Itanium. Lainnya, seperti IBM EAS / 390, tawarkaninstruksi. Anehnya, arsitektur x86 mencakup pergeseran aritmatika kiri tetapimendefinisikan itu menjadi identik dengan pergeseran kiri yang logis.
Putar, 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 bisadiidentifikasi dengan menguji tanda data (diperlakukan sebagai angka).
Seperti operasi aritmatika, operasi logika melibatkan aktivitas ALU danmungkin melibatkan operasi transfer data. Tabel 12.7 memberikan contoh semua pergeserandan memutar operasi dibahas dalam ayat ini.
Konversiinstruksi konversi adalah mereka yang mengubah format atau beroperasi pada formatdata. Contoh adalah mengkonversi dari desimal ke biner. Contoh dari sebuah kompleks yang lebihediting instruksi adalah EAS / 390 Terjemahkan (TR) instruksi. instruksi inibisa digunakan untuk mengkonversi dari satu 8-bit kode yang lain, dan dibutuhkan tiga operan:TR R1 (L), R2operan R2 berisi alamat awal tabel kode 8-bit. Itubyte L mulai alamat yang ditentukan dalam R1 dijabarkan, setiap byte menjadidigantikan oleh isi dari entri tabel diindeks oleh byte itu. Misalnya, untukmenerjemahkan dari EBCDIC ke IRA, pertama kita membuat tabel 256-byte di lokasi penyimpanan,mengatakan, 1000-10FF heksadesimal. tabel berisi karakter IRAKode di urutan representasi biner dari kode EBCDIC; itu adalahKode IRA ditempatkan di meja di lokasi relatif sama dengan nilai binerkode EBCDIC dari karakter yang sama. Dengan demikian, lokasi 10F0 melalui 10F9 akanmengandung 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 kitamemiliki EBCDIC untuk angka 1984 mulai di lokasi 2100 dan kami ingin menerjemahkanuntuk IRA. Asumsikan berikut:
• Lokasi 2100-2103 berisi F1 F9 F8 F4.
• R1 mengandung 2.100.
• R2 berisi 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 prosesor I / O. 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
adalah dalam keadaan istimewa tertentu atau mengeksekusi program di daerah istimewa khusus
memori. Biasanya, instruksi ini disediakan untuk penggunaan operasional
sistem.
Beberapa contoh operasi sistem kontrol adalah sebagai berikut. Sebuah sistem kontrol
instruksi dapat membaca atau mengubah kontrol register; kita membahas register kontrol di
Bab 14. Contoh lain adalah instruksi untuk membaca atau memodifikasi perlindungan penyimpanan
kunci, seperti yang digunakan dalam sistem memori EAS / 390. Contoh lain adalah akses
untuk memproses blok kontrol dalam sistem multiprogramming.
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 perubahan fungsi mereka
urutan eksekusi instruksi. Untuk petunjuk ini, operasi dilakukan
oleh prosesor adalah untuk memperbarui program counter mengandung alamat
beberapa instruksi dalam memori.
Ada sejumlah alasan mengapa perpindahan-of-control operasi yang
wajib. Di antara yang paling penting adalah sebagai berikut:
1. Dalam penggunaan praktis komputer, adalah penting untuk dapat melaksanakan setiapinstruksi lebih dari sekali dan mungkin ribuan kali. mungkinmemerlukan 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 komputeruntuk melakukan satu hal jika salah satu kondisi memegang, dan hal lain jika kondisi lainmemegang. Misalnya, urutan instruksi menghitung akar kuadrat dari angka.Pada awal urutan, tanda nomor diuji. Jika nomoradalah negatif, perhitungan tidak dilakukan, tapi kondisi kesalahan dilaporkan.3. Untuk menulis dengan benar program komputer yang besar atau bahkan menengah adalahtugas sangat sulit. Ini membantu jika ada mekanisme untuk melanggartugas menjadi potongan kecil yang dapat bekerja pada satu per satu.Kita sekarang beralih ke diskusi tentang transfer-of-control operasi yang paling umumditemukan dalam set instruksi: cabang, melompat, dan panggilan prosedur.
INSTRUKSI CABANG A instruksi cabang, juga disebut instruksi melompat,telah sebagai salah satu Operand alamat dari instruksi berikutnya yang akan dieksekusi. Palingsering, instruksi adalah instruksi cabang bersyarat. Artinya, cabang dibuat(Update program counter ke alamat yang sama ditentukan dalam operan) hanya jika tertentukondisi terpenuhi. Jika tidak, instruksi berikutnya dalam urutan dijalankan (incrementprogram counter seperti biasa). Sebuah instruksi cabang di mana cabang selalu diambilmerupakan cabang tanpa syarat.Ada dua cara umum menghasilkan kondisi yang akan diuji dalam bersyaratinstruksi cabang. Pertama, sebagian besar mesin menyediakan kondisi 1-bit atau beberapa bitkode yang ditetapkan sebagai hasil dari beberapa operasi. Kode ini dapat dianggapdari sebagai register dapat dilihat pengguna singkat. Sebagai contoh, operasi aritmatika (ADD,Kurangi, dan sebagainya) bisa mengatur kode kondisi 2-bit dengan salah satu dari berikutempat nilai: 0, positif, negatif, meluap. Pada mesin tersebut, mungkin ada empatberbeda bersyarat instruksi cabang:
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.
Dalam semua kasus ini, hasilnya disebut adalah hasil dari terbaru
operasi 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
baik maju (instruksi dengan alamat yang lebih tinggi) atau mundur (alamat yang lebih 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.
SKIP INSTRUKSI Bentuk lain transfer-of-control instruksi adalah skip
petunjuk. Instruksi melewatkan termasuk alamat tersirat. Biasanya, skip
menyiratkan bahwa satu instruksi dilewati; dengan demikian, alamat tersirat sama alamat
dari instruksi berikutnya ditambah satu panjang instruksi.
Karena instruksi melompat tidak memerlukan field alamat tujuan, itu adalah
bebas untuk melakukan hal-hal lain. Sebuah contoh khas adalah kenaikan-dan-skip-jika-nol (ISZ)
petunjuk. Pertimbangkan fragmen program berikut:
301
~
~
~
309 ISZ R1
310 BR 301
311
Dalam fragmen ini, dua pengalihan-of-control instruksi yang digunakan untuk mengimplementasikan
loop berulang. R1 diatur dengan negatif dari jumlah iterasi menjadi
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.
INSTRUKSI PROSEDUR PANGGILAN Mungkin inovasi yang paling penting dalampengembangan bahasa pemrograman adalah prosedur. Prosedur adalah selfcontainedProgram komputer yang dimasukkan ke dalam program yang lebih besar. Apapuntitik dalam program prosedur dapat dipanggil, atau disebut. prosesordiperintahkan untuk pergi dan melaksanakan seluruh prosedur dan kemudian kembali ke titik dariyang panggilan berlangsung.
Dua alasan utama untuk penggunaan prosedur ekonomi dan modularitas.Prosedur memungkinkan potongan kode yang sama untuk digunakan berkali-kali. Ini adalahpenting bagi perekonomian dalam upaya pemrograman dan untuk membuat penggunaan yang paling efisienruang penyimpanan dalam sistem (program harus disimpan). Prosedur juga memungkinkantugas pemrograman besar untuk dibagi lagi menjadi unit yang lebih kecil. Ini penggunaan modularitassangat memudahkan tugas pemrograman.
Mekanisme Prosedur melibatkan dua instruksi dasar: instruksi panggilanbahwa cabang dari lokasi hadir untuk prosedur, dan instruksi kembaliyang kembali dari prosedur ke tempat dari mana itu disebut. Keduaadalah bentuk-bentuk instruksi percabangan.
Gambar 12.8a menggambarkan penggunaan prosedur untuk membangun sebuah program. Di dalamMisalnya, ada sebuah program utama mulai di lokasi 4000. Program ini mencakuppanggilan ke prosedur PROC1, mulai dari lokasi 4500. Ketika instruksi panggilan iniditemui, prosesor menunda pelaksanaan program utama dan dimulai pelaksanaandari PROC1 dengan mengambil instruksi berikutnya dari lokasi 4500. Dalam PROC1,ada dua panggilan ke PROC2 di lokasi 4800. Dalam setiap kasus, pelaksanaan PROC1
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. Panggilan prosedur dapat muncul dalam prosedur. Hal ini memungkinkan bersarang prosedur
untuk 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 mengambil
menempatkan tepat. Ada tiga tempat umum untuk menyimpan alamat kembali:
• Pendaftaran
• Mulai dari yang disebut prosedur
• Top stack
Pertimbangkan mesin-bahasa instruksi X PANGGILAN, yang merupakan singkatan dari prosedur panggilan
di lokasi X. Jika pendekatan register digunakan, PANGGILAN X menyebabkan berikut
tindakan:
RN<---PC +
PC<---X
mana RN adalah register yang selalu digunakan untuk tujuan ini, PC adalah program counter,
dan
adalah panjang instruksi. Prosedur yang disebut 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<---PC +
PC<---X + 1
Hal ini cukup berguna. Alamat pengirim telah disimpan dengan aman pergi.Kedua pendekatan sebelumnya bekerja dan telah digunakan. Satu-satunya batasanpendekatan ini adalah bahwa mereka mempersulit penggunaan prosedur reentrant.Prosedur reentrant adalah salah satu di mana dimungkinkan untuk memiliki beberapa panggilan terbuka untuk itu diwaktu yang sama. Sebuah prosedur rekursif (yang menyebut dirinya) adalah contoh penggunaanfitur ini (lihat Lampiran H). Jika parameter dilewatkan melalui register atau memoriuntuk prosedur reentrant, beberapa kode harus bertanggung jawab untuk menyimpan parametersehingga register atau ruang memori yang tersedia untuk panggilan prosedur lainnya.Sebuah pendekatan yang lebih umum dan kuat adalah dengan menggunakan stack (lihat Lampiran Ountuk diskusi tumpukan). Ketika prosesor mengeksekusi panggilan, ia menempatkan pengembalianmengatasi di stack. Ketika dijalankan kembali, menggunakan alamat pada stack.Gambar 12.9 mengilustrasikan penggunaan stack.Selain memberikan alamat pengirim, juga sering diperlukan untuk lulusparameter dengan panggilan prosedur. Ini dapat disahkan pada register. kemungkinan lainadalah untuk menyimpan parameter dalam memori setelah instruksi PANGGILAN. Di dalamkasus, kembali harus ke lokasi berikut parameter. Sekali lagi, baik dari
pendekatan ini memiliki kelemahan. Jika register yang digunakan, yang disebut program danProgram menelepon harus ditulis untuk meyakinkan bahwa register digunakan dengan benar. Itupenyimpanan parameter dalam memori membuat sulit untuk bertukar sejumlah variabelparameter. Kedua pendekatan mencegah penggunaan prosedur reentrant.Pendekatan yang lebih fleksibel untuk parameter kelulusan adalah stack. Ketika prosesormengeksekusi panggilan, tidak hanya tumpukan alamat pengirim, tumpukan parameter untukditeruskan ke yang disebut prosedur. Prosedur yang disebut dapat mengakses parameterdari stack. Setelah kembali, kembali parameter juga dapat ditempatkan pada stack. ItuSeluruh set parameter, termasuk alamat pengirim, yang disimpan untuk prosedurDoa ini disebut sebagai stack frame.Sebagai contoh adalah pada Gambar 12.10. Misalnya mengacu pada prosedur Pdimana variabel x1 lokal dan x2 dinyatakan, dan prosedur Q, yang P bisamenelepon dan di mana variabel lokal Y1 dan y2 dinyatakan. Dalam gambar ini, pengembalian
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 khusus
instruksi. Tujuannya adalah untuk menyediakan alat-alat untuk penulis compiler untuk menghasilkan
dioptimalkan mesin terjemahan bahasa program bahasa tingkat tinggi. tabel 12.8
daftar jenis dan memberikan contoh masing-masing. Sebagian besar adalah konvensional
petunjuk yang ditemukan di sebagian besar mesin set instruksi, tetapi beberapa jenis instruksi
disesuaikan dengan arsitektur x86 dan kepentingan tertentu. Lampiran A dari
[CART06] berisi petunjuk x86, bersama-sama dengan operan untuk masing-masing dan
efek dari instruksi pada kode kondisi. Lampiran B dari perakitan NASM
pengguna bahasa memberikan penjelasan lebih rinci dari setiap instruksi x86. Kedua
dokumen tersebut tersedia di situs Web buku ini.
CALL / RETURN INSTRUKSI x86 menyediakan empat instruksi untuk mendukung
Prosedur call / pulang: 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
dari tumpukan frame. Ketika prosedur baru disebut, berikut ini harus dilakukan
pada saat masuk ke prosedur baru:
• Dorong titik pengembalian stack.
• Dorong frame pointer saat ini di stack.
• Salin stack pointer sebagai nilai baru dari pointer bingkai.
• Sesuaikan stack pointer untuk mengalokasikan frame.
Instruksi PANGGILAN mendorong arus nilai instruksi pointer ke stack
dan menyebabkan melompat ke titik masuknya prosedur dengan menempatkan alamat
entry point dalam instruksi pointer. Di 8088 dan 8086 mesin, khas
Prosedur dimulai dengan urutan
PUSH EBP
MOV EBP, ESP
SUB ESP, space_for_locals
mana EBP adalah frame pointer dan ESP adalah pointer stack. Di 80286 dan kemudian
mesin, ENTER instruksi melakukan semua operasi tersebut dalam
instruksi tunggal.
Instruksi ENTER 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 dari penanganan bersarang
Prosedur panggilan untuk bahasa tersebut. Selanjutnya, meskipun ENTER instruksi
menghemat 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
6 siklus jam). Dengan demikian, meskipun mungkin tampak ide yang baik untuk instruksi
mengatur desainer untuk menambahkan fitur ini, itu mempersulit pelaksanaan prosesor
sambil memberikan sedikit atau tidak ada manfaat. Kita akan melihat bahwa, sebaliknya, pendekatan RISC
untuk prosesor desain akan menghindari instruksi kompleks seperti ENTER dan kekuatan
menghasilkan implementasi yang lebih efisien dengan urutan instruksi sederhana.
MANAJEMEN MEMORI Satu set instruksi khusus berkaitan dengan memori
segmentasi. Ini adalah petunjuk istimewa yang hanya bisa dijalankan dari
sistem operasi. Mereka memungkinkan tabel segmen lokal dan global (tabel disebut descriptor)
yang akan diambil dan membaca, dan untuk tingkat hak istimewa dari segmen untuk diperiksa dan diubah.
Instruksi khusus untuk menangani cache on-chip yang dibahas di
Bab 4.
BENDERA STATUS DAN KODE KONDISI bendera Status yang bit dalam register khususyang dapat ditetapkan oleh operasi tertentu dan digunakan dalam instruksi cabang bersyarat. Itukode kondisi merujuk pada pengaturan dari satu atau lebih bendera status. Dalam x86 danbanyak arsitektur lainnya, flag status yang ditetapkan oleh aritmatika dan membandingkan operasi.Operasi membandingkan dalam kebanyakan bahasa mengurangi dua operan, seperti halnya kurangi sebuahoperasi. Perbedaannya adalah bahwa operasi membandingkan hanya menetapkan bendera status, sedangkanoperasi 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 daribendera ini, dapat diuji untuk melompat bersyarat. Tabel 12.10 menunjukkan kondisiKode (kombinasi dari nilai status flag) yang opcodes melompat bersyarat memilikididefinisikan.
Beberapa pengamatan menarik dapat dibuat tentang daftar ini. Pertama, kita mungkiningin menguji dua operan untuk menentukan apakah satu nomor lebih besar dari yang lain. Tapiini akan tergantung pada apakah nomor tersebut ditandatangani atau unsigned. Sebagai contoh,8-bit nomor 11111111 lebih besar dari 00.000.000 jika dua angka ditafsirkanbulat sebagai unsigned (255 7 0) tapi kurang jika mereka dianggap sebagai 8-bit berpasangan melengkapinomor (-1 6 0). Oleh karena itu banyak bahasa assembly memperkenalkan dua setistilah untuk membedakan dua kasus: Jika kita membandingkan dua angka sebagai ditandatanganibilangan bulat, kita menggunakan istilah kurang dari dan lebih besar dari; jika kita membandingkan mereka sebagaiunsigned integer, kita menggunakan istilah di bawah dan di 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 adatidak ada overflow (S = 0 DAN O = 0), atau (2) bit tanda adalah salah satu dan ada overflow.
Sebuah studi dari Gambar 10.4 harus meyakinkan Anda bahwa kondisi diuji untuk berbagaioperasi ditandatangani sesuai.X86 SIMD INSTRUKSI Pada tahun 1996, Intel memperkenalkan teknologi MMX ke nyalini produk Pentium. MMX adalah set instruksi yang sangat optimal untuk tugas-tugas multimedia.Ada 57 instruksi baru yang memperlakukan data di SIMD satu (single-instruksi, multipledata)fashion, yang memungkinkan untuk melakukan operasi yang sama, seperti penambahanatau perkalian, pada beberapa elemen data sekaligus. Setiap instruksi biasanya membutuhkansiklus clock untuk mengeksekusi. Untuk aplikasi yang tepat, ini operasi paralel cepatdapat menghasilkan speedup dua sampai delapan kali lebih algoritma sebanding yang tidak menggunakanpetunjuk MMX [ATKI96]. Dengan diperkenalkannya arsitektur x86 64-bit,Intel telah memperluas ekstensi ini untuk menyertakan quadword ganda (128 bit) operan danoperasi floating-point. Dalam ayat ini, kita menggambarkan fitur MMX.Fokus MMX adalah pemrograman multimedia. Video dan audio data yang biasanyaterdiri dari array besar jenis data kecil, seperti 8 atau 16 bit, sedangkan konvensionalinstruksi yang disesuaikan untuk beroperasi pada data 32 atau 64-bit. Berikut adalah beberapacontoh: Dalam grafis dan video, adegan tunggal terdiri dari array piksel, 2 dan 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 grafis 3D
algoritma, 32 bit yang umum untuk tipe data dasar. Untuk menyediakan operasi paralel
pada ini panjang data, tiga jenis data baru didefinisikan dalam MMX. setiap data
Jenis adalah 64 bit panjang dan terdiri dari beberapa bidang data yang lebih kecil, masing-masing
memegang fixed-point integer. Jenis adalah sebagai berikut:
• byte Dikemas: Delapan byte dikemas ke dalam satu kuantitas 64-bit• Kata Dikemas: Empat kata 16-bit dikemas menjadi 64 bit• Dikemas doubleword: Dua 32-bit doublewords dikemas menjadi 64 bitTabel 12.11 daftar MMX set instruksi. Sebagian besar instruksi melibatkanoperasi paralel pada byte, kata, atau doublewords. Misalnya, PSLLW yanginstruksi melakukan pergeseran logis kiri secara terpisah pada masing-masing dari empat kata dalamdikemas kata operan; instruksi PADDB membutuhkan waktu dikemas operan byte sebagai masukandan melakukan penambahan paralel pada setiap posisi byte secara independen untuk menghasilkandikemas keluaran byte.Salah satu fitur yang tidak biasa dari set instruksi baru adalah pengenalan saturasiaritmatika untuk byte dan kata 16-bit operan. Dengan aritmatika unsigned biasa,ketika operasi meluap (yaitu, membawa keluar dari bit yang paling signifikan), yangsedikit tambahan terpotong. Hal ini disebut sebagai sampul, karena efek daripemotongan dapat, misalnya, untuk menghasilkan hasil samping yang lebih kecil daridua operan masukan. Pertimbangkan penambahan dua kata, dalam heksadesimal, F000hdan 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. Ini biasanya
tidak apa yang dimaksudkan. Dengan saturasi aritmatika, jika hasil penambahan overflow
atau hasil pengurangan di underflow, hasilnya diatur ke terkecil terbesar atau
nilai representable. Untuk contoh sebelumnya, dengan saturasi aritmatika, kami
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 melihat contoh,
diambil dari [PELE97]. Sebuah aplikasi video umum adalah fade-out, fade-in efek,
di mana satu adegan secara bertahap melarutkan ke lain. Dua gambar digabungkan dengan
rata-rata tertimbang:
Result_pixel = A_pixel * fade + B_pixel * (1 - memudar)
Perhitungan ini dilakukan pada setiap posisi pixel di A dan B. Jika seri
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 ke
image B.
Gambar 12.11 menunjukkan urutan langkah-langkah yang diperlukan untuk satu set piksel. Itu
komponen pixel 8-bit dikonversi ke elemen 16-bit untuk mengakomodasi
MMX 16-bit kemampuan berkembang biak. Jika gambar ini menggunakan 640 * 480 resolusi, dan
teknik melarutkan menggunakan semua 255 nilai yang mungkin dari nilai memudar, maka total
jumlah instruksi dieksekusi menggunakan MMX adalah 535.000.000. Perhitungan yang sama,
dilakukan tanpa instruksi MMX, membutuhkan 1,4 miliar eksekusi instruksi
[INTE98].
Jenis ARM Operasi
Arsitektur ARM menyediakan koleksi besar jenis operasi. Pengikut
adalah kategori utama:
• Load dan menyimpan instruksi: Dalam arsitektur ARM, hanya beban dan tokoinstruksi mengakses lokasi memori; aritmatika dan logis instruksi yangdilakukan hanya pada register dan nilai-nilai langsung dikodekan dalam instruksi.Keterbatasan ini adalah karakteristik dari desain RISC dan dieksplorasi lebih lanjut dalamBab 15. arsitektur ARM mendukung dua jenis luas instruksibahwa beban atau menyimpan nilai satu register, atau sepasang register, dari atau kememori: (1) beban atau menyimpan kata 32-bit atau 8-bit unsigned byte, dan (2) bebanatau menyimpan 16-bit unsigned sindiran, dan memuat dan menandatangani memperpanjang sindiran 16-bitatau 8-bit byte.
• Instruksi Cabang: ARM mendukung instruksi cabang yang memungkinkan bersyaratdepan cabang atau mundur hingga 32 MB. Sebagai program counteradalah salah satu register tujuan umum (R15), cabang atau melompat juga dapatdihasilkan dengan menulis nilai ke R15. Sebuah panggilan subroutine dapat dilakukan olehvarian dari instruksi cabang standar. Serta memungkinkan cabangmaju atau mundur hingga 32 MB, Cabang dengan Link (BL) instruksimempertahankan alamat instruksi setelah cabang (alamat pengirim)di LR (R14). Cabang ditentukan oleh kondisi lapangan 4-bit dipetunjuk.
• Instruksi pemrosesan data: Kategori ini berisi petunjuk logis(AND, OR, XOR), menambah dan mengurangi petunjuk, dan uji dan bandingkaninstruksi.
• Instruksi Multiply: integer kalikan petunjuk beroperasi pada kata atauoperan sindiran dan dapat menghasilkan hasil yang normal atau panjang. Sebagai contoh,ada instruksi untuk perkalian yang mengambil dua operan 32-bit dan menghasilkanHasil 64-bit.
• Paralel penambahan dan pengurangan instruksi: Selain data normalpengolahan dan kalikan instruksi, ada satu set Selain paralel daninstruksi pengurangan, di mana bagian-bagian dari dua operan dioperasikan padasejajar. Misalnya, ADD16 menambahkan halfwords atas dua register untukmembentuk sindiran atas hasil dan menambahkan halfwords bawahyang sama dua register untuk membentuk sindiran bawah hasilnya. instruksi iniberguna dalam aplikasi pengolahan gambar, mirip dengan x86 MMXinstruksi.
• Memperpanjang petunjuk: Ada beberapa petunjuk untuk membongkar data dengan tandaatau nol memperluas byte untuk halfwords atau kata-kata, dan halfwords kata-kata.
• Instruksi akses Status daftar: ARM menyediakan kemampuan untuk membaca dan jugauntuk menulis bagian-bagian dari register status.
KODE KONDISI Arsitektur ARM mendefinisikan empat bendera kondisi yang
disimpan dalam status program daftar: N, Z, C, dan V (negatif, nol, Carry
dan overflow), dengan makna dasarnya sama dengan S, Z, C, dan bendera V
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 di ARM:
1. Semua instruksi, bukan hanya instruksi cabang, termasuk bidang kode kondisi,
yang berarti bahwa hampir semua instruksi dapat kondisional dijalankan. Apa saja
kombinasi pengaturan bendera kecuali 1110 atau 1111 dalam kondisi instruksi ini
bidang kode menandakan bahwa instruksi akan dieksekusi hanya jika kondisi
bertemu.
2. Semua instruksi pengolahan data (aritmatika, logis) mencakup bit S yang menandakan
apakah instruksi update bendera kondisi.
Penggunaan eksekusi bersyarat dan pengaturan bersyarat dari bendera kondisi
membantu dalam desain program pendek yang menggunakan memori kurang. Di samping itu,
semua instruksi termasuk 4 bit untuk kode kondisi, sehingga ada trade-off dalam
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.6 DIREKOMENDASIKAN MEMBACA
Instruksi x86 set baik tertutup oleh [BREY09]. Set instruksi ARM ditutupi
di [SLOS04] dan [KNAG04]. [INTE04c] menjelaskan pertimbangan software yang berhubungan dengan mikroprosesor
arsitektur Endian dan membahas pedoman untuk mengembangkan kode Endian-netral
(Kertas tersedia di bagian konten premium untuk buku ini).
12.7 ISTILAH KUNCI, PERTANYAAN REVIEW, DAN MASALAH
Syarat utama
Ulasan Pertanyaan
12.1 Apa elemen khas dari instruksi mesin?
12.2 Apa jenis lokasi dapat menahan 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?
12.9 Daftar dan menjelaskan secara singkat dua cara umum menghasilkan kondisi yang akan diuji dalam
instruksi cabang bersyarat.
12.10 Yang dimaksud dengan bersarang jangka 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 dikemas selama 23b. Karakter ASCII 2312.2 Untuk setiap angka desimal dikemas berikut, menunjukkan nilai desimal:Sebuah. 0111 0011 0000 1001b. 0101 1000 0010c. 0100 1010 011012.3 Sebuah mikroprosesor diberikan memiliki kata-kata dari 1 byte. Apa yang terkecil dan terbesar bilangan bulatyang dapat diwakili dalam representasi berikut:Sebuah. unsignedb. Tanda-besaranc. pelengkap yangd. berpasangan melengkapie. Unsigned desimal dikemasf. Menandatangani desimal dikemas12.4 Banyak prosesor menyediakan 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 binerlogika digunakan.Pertimbangkan penambahan desimal dari dua nomor unsigned. Jika setiap nomor terdiriN digit, maka ada bit 4N di setiap nomor. Dua angka yang akan ditambahkanmenggunakan penambah biner. Menyarankan aturan sederhana untuk memperbaiki hasilnya. melakukan penambahandalam mode ini pada nomor 1698 dan 1786.12.5 puluhan pelengkap dari nomor desimal X didefinisikan sebagai 10N - X, di mana Nadalah jumlah digit desimal di nomor tersebut. Menggambarkan penggunaan pelengkap sepuluh inirepresentasi untuk melakukan pengurangan desimal. Menggambarkan prosedur dengan mengurangkan(0326) 10 dari (0736) 10.12.6 Bandingkan mesin nol, satu, dua, dan tiga alamat dengan menulis program untuk menghitung
X = (A + B * C)> (D - E * F)
untuk masing-masing empat mesin. Petunjuk tersedia untuk digunakan adalah sebagai berikut:
12.7 Pertimbangkan komputer hipotetis dengan set instruksi dari hanya dua instruksi n-bit.Bit pertama menentukan opcode, dan bit sisanya menentukan salah satu 2n-1n-bit kata-kata dari memori utama. Dua instruksi adalah sebagai berikut:SUBS X Kurangi isi lokasi X dari akumulator, dan menyimpanmengakibatkan lokasi X dan akumulator.JUMP alamat X Tempat X dalam program counter.Sebuah kata dalam memori utama mungkin berisi baik instruksi atau bilangan biner dinotasi komplemen berpasangan. Menunjukkan bahwa instruksi repertoar ini cukupmenyelesaikan dengan menentukan bagaimana operasi berikut dapat diprogram:Sebuah. Transfer data: Lokasi X untuk akumulator, akumulator ke lokasi Xb. Selain itu: Tambahkan isi lokasi X untuk akumulatorc. cabang bersyaratd. logis ORe. I / O Operasi12.8 Banyak set instruksi berisi instruksi NOOP, yang berarti tidak ada operasi, yang memilikitidak berpengaruh pada keadaan prosesor selain incrementing program counter. Menyarankanbeberapa penggunaan dari instruksi ini.12.9 Dalam Bagian 12.4, dinyatakan bahwa kedua pergeseran aritmatika kiri dan pergeseran kiri logissesuai dengan perkalian dengan 2 ketika tidak ada overflow, dan jika overflow terjadi,aritmatika dan logis operasi pergeseran meninggalkan menghasilkan hasil yang berbeda, tapi aritmetikpergeseran kiri mempertahankan tanda nomor. Menunjukkan bahwa pernyataan ini benaruntuk 5-bit berpasangan melengkapi bilangan bulat.12.10 Dalam hal apa yang nomor bulat menggunakan shift kanan aritmatika (misalnya, putaran arah +?,putaran ke - ?, 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 programmelawan?12.12 Arsitektur x86 termasuk instruksi disebut Decimal Adjust setelah Penambahan(DAA). DAA melakukan urutan berikut petunjuk:
if ((AL AND 0FH) >9) OR (AF = 1) then
AL d AL + 6;
AF d 1;
else
AF d 0;
endif;
if (AL > 9FH) OR (CF = 1) then
AL d AL + 60H;
CF d 1;
else
CF d 0;
endif.
"H" menunjukkan heksadesimal. AL adalah 8-bit register yang menyimpan hasil penambahan
dua 8-bit unsigned integer. AF 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 The x86 Bandingkan instruksi (CMP) mengurangi operan sumber dari tujuan
operan; itu update status flag (C, P, A, Z, S, O) tapi tidak mengubah salah satu dari
operan. CMP instruksi dapat digunakan untuk menentukan apakah operan tujuan
lebih besar dari, sama dengan, atau kurang dari sumber operan.
a. Misalkan dua operan diperlakukan sebagai unsigned integer. Tampilkan yang statusnya
bendera relevan untuk menentukan ukuran relatif dari dua bilangan bulat dan nilai-nilai apa
bendera sesuai dengan yang lebih besar dari, sama dengan, atau kurang dari.
b. Misalkan dua operan diperlakukan sebagai berpasangan melengkapi bilangan bulat ditandatangani.
Tampilkan yang flag status relevan untuk menentukan ukuran relatif dari
dua bilangan bulat dan nilai-nilai dari bendera apa yang sesuai dengan lebih besar dari, sama dengan,
atau kurang dari.
c. CMP instruksi dapat diikuti oleh Jump bersyarat (Jcc) atau Set Kondisi
(SETcc) instruksi, di mana cc mengacu salah satu dari 16 kondisi yang tercantum
pada Tabel 12.12. Menunjukkan bahwa kondisi diuji untuk nomor ditandatangani
perbandingan yang benar.
12.14 Misalkan kita ingin menerapkan x86 CMP instruksi untuk operan 32-bit yang berisi
nomor dalam format floating-point. Untuk hasil yang benar, apa persyaratan memiliki
harus dipenuhi dalam bidang berikut?
a. 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 instruksi mikroprosesor set termasuk instruksi yang menguji kondisi
dan menetapkan operan tujuan jika kondisi benar. Contoh termasuk SETcc yang
pada x86, yang Scc pada MC68000 Motorola, dan Scond di National
NS32000.
a. Ada beberapa perbedaan antara petunjuk ini:
• SETcc dan Scc beroperasi hanya pada byte, sedangkan Scond beroperasi pada byte, kata,
dan doubleword operan.
• 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 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. Membahas
apakah kode kondisi harus ditetapkan sebagai hasil dari instruksi ini.
c. Sebuah sederhana IF pernyataan seperti IF 7 b THEN dapat diimplementasikan menggunakan
Metode representasi numerik, yaitu, membuat nilai Boolean manifest,
sebagai lawan dari aliran metode kontrol, yang mewakili nilai Boolean sebuah
ekspresi dengan titik dicapai dalam program ini. Sebuah compiler mungkin menerapkan IF
7 ssb YANG dengan kode x86 berikut:
SUB CX, CX ;set register CX to 0
MOV AX, B ;move contents of location B to register AX
CMP AX, A ;compare contents of register AX and location A
JLE TEST ;jump if A … B
INC CX ;add 1 to contents of register CX
TEST JCXZ OUT ;jump if contents of CX equal 0
THEN OUT
Hasil (A 7 B) adalah nilai Boolean diadakan di register dan tersedia di kemudian hari,
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 menyelamatkan
memori dan waktu eksekusi. (Petunjuk: Tidak ada instruksi x86 baru tambahan yang diperlukan,
selain SETcc itu.)
d. Sekarang perhatikan pernyataan bahasa tingkat tinggi:
A: = (B 7 C) OR (D = F)
A compiler might generate the following code:
MOV EAX, B ;move contents of location B to register EAX
CMP EAX, C ;compare contents of register EAX and location C
MOV BL, 0 ;0 represents false
JLE N1 ;jump if (B … C)
MOV BL, 1 ;1 represents false
N1 MOV EAX, D
CMP EAX, F
MOV BH, 0
JNE N2
MOV BH, 1
N2 OR BL, BH
Tampilkan implementasi alternatif menggunakan instruksi SETcc yang menyelamatkan memori
dan waktu eksekusi.
12.16 Misalkan dua register mengandung nilai-nilai heksadesimal berikut: AB0890C2,4598EE50. Apa hasil dari menambahkan mereka menggunakan instruksi MMX:a. untuk byte dikemasb. untuk kata dikemasAsumsikan saturasi aritmatika tidak digunakan.12.17 Lampiran O menunjukkan bahwa tidak ada petunjuk tumpukan berorientasi dalam set instruksijika 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 untuk infiks:a. AB + C + D *b. AB / CD / +c. ABCDE + ** /d. ABCDE + F / + G - H / * +12.19 Mengkonversi rumus berikut dari infiks untuk membalikkan Polandia:a. A + B + C + D + Eb. (A + B) * (C + D) + Ec. (A * B) + (C D *) + Ed. (ABCD EFGH12.20 Mengkonversi ekspresi A + B - C untuk notasi postfix menggunakan algoritma Dijkstra.Menunjukkan langkah-langkah yang terlibat. Apakah hasilnya setara dengan (A + B) - C atau A + (B - C)?Apakah itu penting?12.21 Menggunakan algoritma untuk mengkonversi infiks untuk postfix didefinisikan dalam Lampiran O, menunjukkanlangkah yang terlibat dalam mengkonversi ekspresi Gambar O.3 ke postfix. Gunakan presentasimirip dengan Gambar O.5.12.22 Tampilkan perhitungan ekspresi pada Gambar O.5, menggunakan presentasi yang mirip denganGambar O.4.12.23 Gambar ulang tata letak little-endian pada Gambar 12.13 sehingga byte muncul sebagai bernomordalam tata letak big-endian. Artinya, acara memori 64-bit baris, dengan byte terdaftar kirike kanan, atas ke bawah.12.24 Untuk struktur data sebagai berikut, menggambar layout besar-endian dan little-endian, menggunakanformat Gambar 12.13, dan komentar pada hasil.a. struct {ganda i; // 0x1112131415161718} S1;b. struct {int i; // 0x11121314int j; // 0x15161718} S2;
c. struct {
short i; //0x1112
short j; //0x1314
short k; //0x1516
short l; //0x1718
} s3;
12.25 The IBM Power arsitektur spesifikasi tidak mendikte bagaimana prosesor harus menerapkanmodus little-endian. Ini menentukan hanya pandangan memori prosesor harus memilikiketika beroperasi dalam mode little-endian. Ketika mengkonversi struktur data dari big endianuntuk little endian, prosesor bebas untuk menerapkan mekanisme byte-swapping benar atau untukmenggunakan semacam mekanisme modifikasi alamat. prosesor Daya saat ini adalah semuabawaan mesin big-endian dan menggunakan modifikasi alamat untuk memperlakukan data sebagai little-endian.Mempertimbangkan struktur s didefinisikan pada Gambar 12.13. Tata letak di kanan bawahporsi angka menunjukkan struktur s seperti yang terlihat oleh prosesor. Bahkan, jika strukturdikompilasi dalam mode little-endian, tata letak dalam memori ditunjukkan pada Gambar 12.12. Menjelaskanpemetaan yang terlibat, menjelaskan cara mudah untuk menerapkan pemetaan, dan mendiskusikanefektivitas pendekatan ini.12.26 Tulis program kecil untuk menentukan endianness dari mesin dan melaporkan hasil.Menjalankan program pada komputer yang tersedia untuk Anda dan menyerahkan output.12.27 The MIPS prosesor dapat diatur untuk beroperasi baik big-endian atau mode little-endian.Mempertimbangkan beban Byte Unsigned (LBU) instruksi, yang memuat byte dari memorike dalam orde rendah 8 bit register dan mengisi high-order 24 bit registerdengan nol. Deskripsi LBU diberikan dalam manual MIPS referensi menggunakandaftar transfer bahasa sebagai
mem d LoadMemory(…)
byte d VirtualAddress1..0
if CONDITION then
GPR[rt] d 024}mem31 – 8 * byte .. 24 – 8 * byte
else
GPR[rt] d 024}mem7 + 8 * byte .. 8 * byte
endif
di mana byte mengacu pada dua low-order bit dari alamat efektif dan mem mengacu
dengan nilai diambil dari memori. Dalam manual, bukan KONDISI kata,
salah satu dari dua kata berikut digunakan: BigEndian, LittleEndian. Yang kata digunakan?
12.28 Sebagian besar, tapi tidak semua, prosesor menggunakan besar- atau little-endian bit memesan dalam byte yang
konsisten dengan memesan besar- atau little-endian byte dalam skalar multibyte. Mari kita
mempertimbangkan Motorola 68030, yang menggunakan big-endian byte pemesanan. Dokumentasiyang 68.030 mengenai format membingungkan. panduan pengguna menjelaskan bahwa bit yang memesanbidang bit adalah kebalikan dari bit pemesanan bilangan bulat. Sebagian besar operasi bit bidang mengoperasikandengan satu memesan endian, tetapi lapangan beberapa bit operasi membutuhkan pemesanan berlawanan. Ituberikut penjelasan dari manual pengguna menjelaskan sebagian besar operasi bit bidang:Sebuah operan bit ditentukan oleh alamat dasar yang memilih satu byte dalam memori(Basis byte), dan sejumlah bit yang memilih satu bit dalam byte ini. Itupaling sedikit signifikan sedikit tujuh. Sebuah operan bit bidang ditentukan oleh: (1) basisalamat yang memilih satu byte dalam memori; (2) bidang bit offset yang menunjukkanyang paling kiri (base) sedikit bidang bit dalam kaitannya dengan bit yang paling signifikan daridasar byte; dan (3) lebar lapangan sedikit yang menentukan berapa banyak bit kehak dasar byte di bidang bit. Bit yang paling signifikan dari dasarbidang bit byte adalah offset 0, bit paling signifikan dari dasar byte adalah bit lapanganmengimbangi 7.Apakah petunjuk ini menggunakan big-endian atau little-endian bit pemesanan?
APPENDIX 12A LITTLE-, BIG-, AND 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
dari byte pemesanan dan kemudian menganggap bahwa bit.
Byte Pemesanan
Konsep endianness pertama kali dibahas dalam literatur oleh Cohen [COHE81].
Sehubungan dengan byte, endianness harus dilakukan dengan urutan byte dari skalar multibyte
nilai-nilai. 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 byte-addressable
memori di lokasi byte 184. Nilai ini terdiri dari 4 byte, dengan paling signifikan
byte yang berisi nilai 78 dan byte paling signifikan yang mengandung nilai 12.
Ada dua cara yang jelas untuk menyimpan nilai ini:
Pemetaan di sebelah kiri menyimpan byte paling signifikan dalam byte numerik terendah
alamat; ini dikenal sebagai endian besar dan setara dengan urutan dari kiri ke kanan penulisan
dalam bahasa budaya Barat. Pemetaan di toko sebelah kanan byte paling signifikan
di alamat byte numerik terendah; ini dikenal sebagai little endian dan mengingatkan
hak-ke-kiri urutan operasi aritmatika dalam aritmatika units.3 Untuk multibyte diberikan
nilai skalar, endian besar dan kecil endian adalah pemetaan byte-terbalik satu sama lain.
Konsep endianness muncul jika diperlukan untuk mengobati multiple-byteentitas sebagai item data tunggal dengan satu alamat, meskipun terdiri dariunit beralamat lebih kecil. Beberapa mesin, seperti Intel 80x86, x86, VAX, danAlpha, adalah mesin little-endian, sedangkan yang lain, seperti IBM System 370/390,Motorola 680x0, Sun SPARC, dan sebagian besar mesin RISC, yang endian besar. Inimenyajikan masalah ketika data ditransfer dari mesin dari satu jenis endian untukyang lain dan ketika programmer mencoba untuk memanipulasi byte individu atau bitdalam skalar multibyte.
Milik endianness tidak melampaui unit data individu.Dalam setiap mesin, agregat seperti file, struktur data, dan array terdiridari beberapa unit data, masing-masing dengan endianness. Dengan demikian, konversi blok memoridari satu gaya endianness ke yang lain membutuhkan pengetahuan tentang struktur data.
Gambar 12.13 menggambarkan bagaimana endianness menentukan pengalamatan dan bytememesan. Struktur C di atas berisi sejumlah tipe data. Ingatantata letak dalam hasil kiri bawah dari kompilasi struktur yang untuk big-endianmesin, dan bahwa di kanan bawah untuk mesin little-endian. Dalam setiap kasus, memoridigambarkan sebagai rangkaian 64-bit baris. Untuk kasus big-endian, memori biasanyaadalah dilihat dari kiri ke kanan, atas ke bawah, sedangkan untuk kasus little-endian, memoribiasanya dipandang sebagai kanan ke kiri, atas ke bawah. Perhatikan bahwa layout ini sewenang-wenang.Entah skema bisa menggunakan salah kiri ke kanan atau kanan ke kiri dalam satu baris; iniadalah masalah penggambaran, bukan tugas memori. Bahkan, dalam memandang programmermanual untuk berbagai mesin, koleksi membingungkan penggambaran adalah menjadiditemukan, bahkan di dalam manual yang sama.
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 skalar multibyte, urutan byte di littleendian yang
Struktur adalah kebalikan dari yang untuk struktur besar-endian.
• Endianness tidak mempengaruhi urutan item data dalam struktur. Demikian,
kata empat karakter c pameran byte reversal, tapi byte tujuh karakter
Array 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.
Tidak ada konsensus umum untuk yang gaya unggul endianness.4Poin-poin berikut mendukung gaya big-endian:
• Karakter-string menyortir: Sebuah prosesor big-endian lebih cepat di bandingkan integeralignedkarakter string; integer ALU dapat membandingkan beberapa byte secara paralel.• Decimal / IRA kesedihan: Semua nilai dapat dicetak kiri ke kanan tanpa menyebabkankebingungan.• Agar Konsisten: prosesor Big-endian menyimpan bilangan bulat dan karakter merekastring dalam urutan yang sama (paling signifikan byte yang lebih dulu).
Poin-poin berikut mendukung gaya little-endian:
• Sebuah prosesor big-endian harus melakukan penambahan ketika mengkonversi integer 32-bitalamat ke alamat bilangan bulat 16-bit, untuk menggunakan byte paling signifikan.• 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 suatu halmenampung mesin sebelumnya dari apa pun.
PowerPC adalah prosesor bi-endian yang mendukung baik besar-endian danmode little-endian. Arsitektur bi-endian memungkinkan pengembang perangkat lunak untukmemilih mode baik ketika melakukan migrasi sistem operasi dan aplikasi dari lainnyamesin. Sistem operasi menetapkan modus endian di mana prosesmenjalankan. Setelah modus yang dipilih, semua beban memori berikutnya dan toko ditentukandengan model memori-menangani mode itu. Untuk mendukung perangkat inifitur, 2 bit diselenggarakan dalam keadaan mesin register (MSR) dikelola olehsistem operasi sebagai bagian dari negara proses. Satu bit menentukan modus endiandi 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 pada 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 (sedikitendian) atau byte bit paling signifikan (big endian)?Pertanyaan-pertanyaan ini tidak dijawab dengan cara yang sama pada semua mesin. Memang, padabeberapa mesin, jawaban yang berbeda dalam situasi yang berbeda. Selanjutnya,pilihan besar- atau little-endian bit memesan dalam byte tidak selalu konsistendengan memesan besar- atau little-endian byte dalam skalar multibyte. programmerperlu peduli dengan isu-isu ini ketika memanipulasi bit individual.Bidang lain yang menjadi perhatian adalah ketika data yang ditransmisikan melalui jalur bit-serial.Ketika sebuah byte individu ditransmisikan, apakah sistem mengirimkan paling signifikanbit pertama atau bit paling signifikan pertama? perancang harus memastikan bahwabit masuk akan ditangani dengan baik. Untuk pembahasan tentang masalah ini, lihat [JAME90].
Sumber : http://www.ebook-dl.com/
Tidak ada komentar:
Posting Komentar