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.

Tidak ada komentar:

Posting Komentar