Set-set Instruksi : Karakteristik dan fungsi

12.1 Karakteristik Mesin Instruksi
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 Reading

12,7 Syarat Key, Ulasan Pertanyaan, dan Masalah
Lampiran 12A sedikit-, besar-, dan Bi-Endian

BAB 12 / Set-set Instruksi : Karakteristik dan fungsi

Banyak dari apa yang dibahas dalam buku ini tidak nampak kepada pengguna atau
programmer komputer. Jika seorang programmer menggunakan bahasa tingkat tinggi, seperti
sebagai Pascal atau Ada, sangat sedikit dari arsitektur mesin yang mendasari terlihat.
Satu batas di mana desainer komputer dan programmer komputer
dapat melihat mesin yang sama adalah mesin set instruksi. Dari sudut perancang
pandang, mesin set instruksi memberikan persyaratan fungsional untuk
prosesor: menerapkan prosesor adalah tugas yang sebagian besar melibatkan menerapkan
instruksi mesin ditetapkan. Pengguna yang memilih untuk program di mesin
bahasa (sebenarnya, dalam bahasa assembly; lihat Lampiran B) menjadi sadar akan
mendaftar dan struktur memori, 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 instruksi dijalankan,
disebut sebagai instruksi mesin atau instruksi komputer. Koleksi yang berbeda
instruksi 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 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.

                                                                                                    12.1 Karakteristik Instruksi / Mesin



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

Representasi Instruksi


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, Y

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

Type 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
 • Kontrol: 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.

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,
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 alamat
untuk referensi operan sumber. Hasil operasi harus disimpan, menyarankan
alamat ketiga, yang mendefinisikan operan tujuan. Akhirnya, setelah selesai dari
instruksi, instruksi berikutnya harus diambil, dan alamat yang dibutuhkan.

baris ini penalaran menunjukkan bahwa instruksi bisa masuk akal diperlukan
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 beberapa
instruksi tujuan khusus dengan lebih operan. Misalnya, beban dan menyimpan
beberapa instruksi dari arsitektur ARM, dijelaskan pada Bab 13, menunjuk
sampai 17 operan mendaftar di sebuah instruksi.

Gambar 12.3 membandingkan instruksi satu, dua, dan tiga alamat khas yang
dapat digunakan untuk menghitung Y = (A - B)> [C + (D * E)]. Dengan tiga alamat,
setiap instruksi menetapkan dua lokasi sumber operan dan operan tujuan
lokasi. 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.


format instruksi tiga alamat yang tidak umum karena mereka memerlukan
relatif Format instruksi panjang untuk memegang tiga referensi alamat. dengan twoaddress
instruksi, dan untuk operasi biner, satu alamat harus melakukan tugas ganda sebagai
baik operan dan hasilnya. Dengan demikian, instruksi SUB Y, B melakukan perhitungan
Y - B dan toko hasil di Y.

 Format dua alamat mengurangi ruang Persyaratan tetapi juga memperkenalkan beberapa kejanggalan. Untuk menghindari mengubah nilai operan, instruksi PINDAHKAN digunakan untuk memindahkan salah satu nilai ke hasil atau lokasi sementara sebelum melakukan operasi. contoh program kami memperluas 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.

instruksi Zero-alamat berlaku untuk organisasi memori khusus yang disebut
stack. Tumpukan adalah terakhir-in-first-out set lokasi. Tumpukan ini di lokasi yang dikenal
dan, sering, setidaknya atas dua elemen dalam register prosesor. Demikian,
petunjuk nol-alamat akan referensi atas dua elemen stack. tumpukan
dijelaskan dalam Lampiran O. Penggunaannya dieksplorasi lebih lanjut dalam bab ini dan di
Bab 13.

Tabel 12.1 merangkum interpretasi untuk ditempatkan pada petunjuk dengan
nol, satu, dua, atau tiga alamat. Dalam setiap kasus di meja, diasumsikan bahwa
alamat dari instruksi berikutnya adalah implisit, dan yang satu operasi dengan dua sumber
operan 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
kurang prosesor kompleks. Hal ini juga menghasilkan instruksi panjang pendek. Di sisi lain
tangan, program mengandung lebih jumlah instruksi, yang dalam hasil umum lagi
kali eksekusi dan lagi, program yang lebih kompleks. Juga, ada yang penting
ambang antara petunjuk satu-alamat dan multiple-alamat. Dengan satu-alamat
instruksi, programmer umumnya memiliki tersedia hanya satu tujuan umum register,
akumulator. Dengan instruksi multiple-address, itu adalah umum untuk memiliki
beberapa register tujuan umum. Hal ini memungkinkan beberapa operasi yang akan dilakukan,


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 Design

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

  • Alamat
  • Nomor
  • Karakter
  • Data Logical

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 paling
nyaman bagi manusia, mereka tidak bisa, dalam bentuk karakter, dengan mudah disimpan atau
ditularkan oleh pengolahan data dan sistem komunikasi. Sistem seperti ini
dirancang untuk data biner. Dengan demikian, sejumlah kode telah dirancang oleh karakter yang
diwakili oleh urutan bit. Mungkin contoh umum awal
ini adalah kode Morse. Hari ini, kode karakter yang paling umum digunakan dalam
International Reference Alphabet (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 yang berbeda karakter dapat diwakili. Ini adalah jumlah yang lebih besar dari yang diperlukan untuk
mewakili karakter yang dapat dicetak, dan beberapa pola mewakili karakter kontrol.
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 total jumlah 1s biner di setiap oktet
selalu ganjil (aneh paritas) atau selalu bahkan (paritas genap).
Catatan pada Tabel F.1 (Lampiran F) bahwa untuk bit pola IRA 011XXXX, yang
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
Desimal Interchange Code (EBCDIC). EBCDIC digunakan pada mainframe IBM. Saya t
adalah kode 8-bit. Seperti IRA, EBCDIC kompatibel dengan desimal dikemas. Di
kasus EBCDIC, kode 11110000 melalui 11111001 mewakili digit

0 sampai 9.

Data 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 dalam
struktur data dan pemanfaatan memori efisien, kata tidak perlu selaras pada evennumbered
alamat; doublewords tidak perlu selaras pada alamat merata dibagi jadi 4; dan quadwords tidak perlu selaras pada alamat dibagi secara merata 8; dan sebagainya.
Namun, ketika data diakses di bus 32-bit, transfer data mengambil
menempatkan dalam satuan doublewords, mulai dari alamat habis dibagi 4. Prosesor
mengubah permintaan untuk nilai-nilai sejajar ke urutan permintaan untuk bus
transfer. Seperti dengan semua mesin Intel 80x86, x86 menggunakan gaya little-endian;
yaitu, byte paling signifikan disimpan dalam alamat terendah (lihat Lampiran 12A
untuk diskusi tentang endianness).
Byte, kata, doubleword, quadword, dan quadword ganda disebut sebagai tipe data umum. Selain itu, x86 mendukung jajaran tertentu jenis data yang diakui dan dioperasikan oleh instruksi tertentu. tabel 12.2 merangkum jenis.
Gambar 12.4 mengilustrasikan x86 tipe data numerik. melengkapi representasi berpasangan dan mungkin 16, 32, atau 64 bit panjang. floatingpoint yang ketik sebenarnya mengacu pada satu set jenis yang digunakan oleh unit floating-point dan dioperasikan oleh instruksi floating-point. Tiga representasi floating-point sesuai dengan standar IEEE 754.
SIMD dikemas (single-instruksi-multiple-data) tipe data diperkenalkan
untuk arsitektur x86 sebagai bagian dari perluasan 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
ini 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 dasar:
- 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 Beban kata ARM yang arsitektur didefinisikan untuk memutar kanan
data kata-blok ditransfer oleh alamat non kata-blok satu, dua, atau
tiga byte tergantung pada nilai dari dua setidaknya alamat bit signifikan

 • Memeriksa Keselarasan: Ketika bit kontrol yang tepat diatur, data batalkan sinyal
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 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 berbeda petunjuk 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 operan adalah register atau memori sebagai bagian dari operan. VAX Pendekatan agak mudah 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 di petunjuk. Kami akan kembali ke perbedaan ini ketika kita membahas format instruksi di
Bab 13.

Dalam hal tindakan prosesor, operasi transfer data mungkin adalah yang paling sederhana
mengetik. 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 untuk memori nyata           alamat.
  3. Tentukan apakah item dibenahi adalah dalam cache.
  4. Jika tidak, mengeluarkan perintah untuk modul memori.

Aritmatika

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.

Logika

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) = 10.100.101
  (R2) = 00.001.111

kemudian


(R1) DAN (R2) = 00.000.101

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) = 10.100.101
  (R2) = 11111111

kemudian

(R1) XOR (R2) = 01.011.010

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 tidak
tidak menggeser bit tanda. Pada pergeseran aritmatika kanan, sedikit tanda direplikasi ke
posisi bit ke kanan. Pada pergeseran aritmatika kiri, pergeseran kiri logis dilakukan pada
semua bit tapi sedikit tanda, yang ditahan. Operasi ini dapat mempercepat tertentu
operasi aritmatika. Dengan angka dalam notasi berpasangan melengkapi, aritmatika tepat
bergeser bersesuaian untuk pembagian dengan 2, dengan pemotongan untuk angka ganjil. kedua suatu aritmatika meninggalkan shift dan pergeseran kiri yang logis sesuai dengan perkalian dengan 2 saat tidak ada melimpah. Jika overflow terjadi, operasi aritmatika dan shift kiri logis
menghasilkan 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, tawarkan
instruksi. Anehnya, arsitektur x86 mencakup pergeseran aritmatika kiri tetapi
mendefinisikan 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 bisa 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 pergeseran
dan memutar operasi dibahas dalam ayat ini.


Konfersi

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

TR R1 (L), R2

operan R2 berisi alamat awal tabel kode 8-bit. Itu byte L mulai alamat yang ditentukan dalam R1 dijabarkan, setiap byte menjadi 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, mengatakan, 1000-10FF heksadesimal. tabel berisi karakter IRA Kode di urutan representasi biner dari kode EBCDIC; itu adalah Kode IRA ditempatkan di meja di lokasi relatif sama dengan nilai biner kode EBCDIC dari karakter yang sama. Dengan demikian, lokasi 10F0 melalui 10F9 akan mengandung 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 di lokasi 2100 dan kami ingin menerjemahkan
untuk IRA. Asumsikan berikut:

 • Lokasi 2100-2103 berisi F1 F9 F8 F4.
 • R1 mengandung 2100.
 • 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 setiap
instruksi lebih dari sekali dan mungkin ribuan kali. 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 komputer
untuk melakukan satu hal jika salah satu kondisi memegang, dan hal lain jika kondisi lain
memegang. Misalnya, urutan instruksi menghitung akar kuadrat dari angka.
Pada awal urutan, tanda nomor diuji. Jika nomor
adalah negatif, perhitungan tidak dilakukan, tapi kondisi kesalahan dilaporkan.
 3. Untuk menulis dengan benar program komputer yang 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 tentang transfer-of-control operasi yang paling umum
ditemukan 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. Paling
sering, instruksi adalah instruksi cabang bersyarat. Artinya, cabang dibuat
(Update program counter ke alamat yang sama ditentukan dalam operan) hanya jika tertentu
kondisi terpenuhi. Jika tidak, instruksi berikutnya dalam urutan dijalankan (increment
program counter seperti biasa). Sebuah instruksi cabang di mana cabang selalu diambil
merupakan cabang tanpa syarat.
Ada dua cara umum menghasilkan kondisi yang akan diuji dalam bersyarat
instruksi cabang. Pertama, sebagian besar mesin menyediakan kondisi 1-bit atau beberapa bit
kode yang ditetapkan sebagai hasil dari beberapa operasi. Kode ini dapat dianggap
dari sebagai register dapat dilihat pengguna singkat. Sebagai contoh, operasi aritmatika (ADD,
Kurangi, dan sebagainya) bisa mengatur kode kondisi 2-bit dengan salah satu dari berikut
empat nilai: 0, positif, negatif, meluap. Pada mesin tersebut, mungkin ada empat
berbeda 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 adalah dilewati, dan program berlanjut dengan instruksi berikutnya setelah akhir loop.

INSTRUKSI PROSEDUR PANGGILAN Mungkin inovasi yang paling penting dalam
pengembangan bahasa pemrograman adalah prosedur. Prosedur adalah selfcontained
Program komputer yang dimasukkan ke dalam program yang lebih besar. Apapun
titik dalam program prosedur dapat dipanggil, atau disebut. prosesor
diperintahkan untuk pergi dan melaksanakan seluruh prosedur dan kemudian kembali ke titik dari
yang panggilan berlangsung. Dua alasan utama untuk penggunaan prosedur ekonomi dan modularitas. Prosedur memungkinkan potongan kode yang sama untuk digunakan berkali-kali. Ini adalah penting bagi perekonomian dalam upaya pemrograman dan untuk membuat penggunaan yang paling efisien 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
bahwa cabang dari lokasi hadir untuk prosedur, dan instruksi kembali
yang kembali dari prosedur ke tempat dari mana itu disebut. Kedua
adalah bentuk-bentuk instruksi percabangan.
Gambar 12.8a menggambarkan penggunaan prosedur untuk membangun sebuah program.
Di dalam Misalnya, ada sebuah program utama mulai di lokasi 4000. Program ini mencakup
panggilan ke prosedur PROC1, mulai dari lokasi 4500. Ketika instruksi panggilan ini
ditemui, prosesor menunda pelaksanaan program utama dan dimulai pelaksanaan
dari 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 v PC +

PC v 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 v PC +

PC v X + 1

Hal ini cukup berguna. Alamat pengirim telah disimpan dengan aman pergi.
Kedua pendekatan sebelumnya bekerja dan telah digunakan. Satu-satunya batasan
pendekatan ini adalah bahwa mereka mempersulit penggunaan prosedur reentrant.
Prosedur reentrant adalah salah satu di mana dimungkinkan untuk memiliki beberapa panggilan terbuka untuk itu di waktu yang sama. Sebuah prosedur rekursif (yang menyebut dirinya) adalah contoh penggunaan fitur ini (lihat Lampiran H). Jika parameter 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.
Sebuah pendekatan yang lebih umum dan kuat adalah dengan menggunakan stack (lihat Lampiran O
untuk diskusi tumpukan). Ketika prosesor mengeksekusi panggilan, ia menempatkan pengembalian
mengatasi di stack. Ketika dijalankan kembali, menggunakan alamat pada stack.
Gambar 12.9 mengilustrasikan penggunaan stack.
Selain memberikan alamat pengirim, juga sering diperlukan untuk lulus
parameter dengan panggilan prosedur. Ini dapat disahkan pada register. kemungkinan lain
adalah untuk menyimpan parameter dalam memori setelah instruksi PANGGILAN. Di dalam
kasus, kembali harus ke lokasi berikut parameter. Sekali lagi, baik dari
pendekatan ini memiliki kelemahan. Jika register yang digunakan, yang disebut program dan
Program menelepon harus ditulis untuk meyakinkan bahwa register digunakan dengan benar. Itu
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 untuk diteruskan ke yang disebut prosedur. Prosedur yang disebut dapat mengakses parameter dari stack.
Setelah kembali, kembali parameter juga dapat ditempatkan pada stack. Itu
Seluruh set parameter, termasuk alamat pengirim, yang disimpan untuk prosedur
Doa ini disebut sebagai stack frame.
Sebagai contoh adalah pada Gambar 12.10. Misalnya mengacu pada prosedur P
dimana variabel x1 lokal dan x2 dinyatakan, dan prosedur Q, yang P bisa menelepon 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.