INSTRUKSI MESIN DAN PROGRAM Ayu Andini (20220910163) Muhammad Arya Gading(20220910040)
2 | Ayu Andini & Arya Gading Instruksi Mesin dan Program Buku ini membahas tentang Instruksi Mesin dan Program. Setelah mempelajari buku ini diharapkan dapat memahami karakteristik fungsi set instruksi, karakteristik eksekusi instruksi dan mode pengalamatan instruksi. 1.1. KARAKTERISTIK DAN FUNGSI SET INSTRUKSI Salah satu abstraksi penting yang digunakan oleh (programmer) adalah arsitektur set instruksi (instruction set architecture- ISA). Pemrogram bahasa mesin memandang mesin pada level abstraksi yang disediakan oleh ISA. ISA didefenisikan sebagai personalitas suatu CPU yang secara tidak langsung mempengaruhi desain sistem keseluruhan. ISA menetapkan bagaimana fungsi-fungsi sebuah CPU: instruksi apa yang dieksekusi, dan interpretasi apa yang diperoleh dari instruksi-instruksi ini. Mengapa lapisan ISA dibuat? Abstraksi level-ISA menyediakan detail tentang mesin yang dibutuhkan oleh pemrogram untuk membuat program bahasa mesin yang bekerja pada mesin. Tujuannya adalah bagaimana mempunyai sebuah platform bersama untuk mengeksekusi program. Jika sebuah program ditulisi dalam C, maka sebuah compiler menerjemahkannya kedalam program bahasa mesin yang ekivalen yang dapat dijalankan pada prosesor (CPU) logika levelISA. Dengan cara yang serupa, jika anda menulis program dalam FORTRAN, gunakan compiler FORTRAN untuk membangkitkan kode yang dapat dieksekusi pada prosesor logika level-ISA. Untuk kita, abstraksi pada level-ISA adalah juga penting untuk suatu alasan lain. ISA merepresentasikan suatu antarmuka (interface) perangkat keras dan perangkat lunak level terendah, yakni pada level mesin.
Instruksi mesin dan program | 3 1.1.1. Keuntungan Menggunakan Bahasa Tingkat Tinggi Bahasa-bahasa tingkat tinggi seperti C dan Java lebih disukai karena mereka memberikan abstraksi yang nyaman/mudah dari sistem yang mendasari, cocok untuk pemecahan masalah. Keuntungan pemrograman dalam bahasa tingkat tinggi daripada bahasa assembly meliputi: 1. Pengembangan programlebih cepat dalam bahasa tingkat tinggi. Banyak bahasa tingkat tinggi menyediakan struktur(sekuensial, seleksi, iterasi) yang memfasilitasi pengembangan program. Program yang ditulis dalam bahasa tingkat tinggi relatif lebih kecildan lebih mudah untuk dikodekan dan di-debug. 2. Program yang ditulis dalam bahasa tingkat tinggi lebih mudah penanganannya. Pemrograman untuk aplikasi baru dapat menghabiskan beberapa minggu sampai beberapa bulan, dan siklus hidup perangkat lunak aplikasi demikian dapat beberapa tahun. Karena itu, sangat penting bahwa pengembangan perangkat lunak dilakukan dengan maksud untuk pemeliharaan perangkat lunak, yang melibatkan kegiatan mulai dari penetapanbug untuk menghasilkan perangkat lunak versi berikutnya. Program yang ditulis dalam bahasa tingkat tinggi lebih mudah untuk dipahami dan ketika praktik pemrograman yang baik diikuti, lebih mudah penanganannya. Program bahasa assembly cenderung panjang dan menggunakan lebih banyak waktu untuk pengodean dan debug. Akibatnya penanganannya juga sulit. 3. Program yang ditulis dalam bahasa tingkat tinggi bersifat portable. Program bahasa tingkat tinggi mengandung sangat sedikit rincian spesifik mesin,
4 | Ayu Andini & Arya Gading dan merekadapat digunakandengan sedikit atau tanpa modifikasi pada sistem komputer yang berbeda. Sebaliknya, program bahasa assembly ditulis untuk sistem tertentudan tidak dapat digunakan pada sistem yang berbeda. 1.1.2. Mengapa Program dalam Bahasa Assembly? Meskipun kurang menguntungkan, beberapa pemrograman masih dilakukan dalam bahasa assembly. Ada dua alasan utama untuk ini: efisiensi dan akses ke perangkat keras sistem. Efisiensi mengacu pada seberapa"baik" sebuah program adad alam penncapaian tujuan tertentu. Di sini kita mempertimbangkan dua tujuan berdasarkan ruang (efisiensi-ruang) dan waktu (efisiensi-waktu). Efisiensi-ruang mengacu pada kebutuhan memorid ari sebuah program (yaitu, ukuran kode). Program A dikatakan lebih efisien-ruang jika dia membutuhkan ruang memori kurang dari Program B dalam melakukan pekerjaan yang sama. Sangat sering, program yang ditulis dalam Bahasa assembly cenderung menghasilkan lebih banyak executablecode yang kompak dibandingkan versi bahasa tingkat tinggiyang sesuai. Anda tidak harus bingung ukuran kode sumber denga nexecutable-code. Efisiensi-waktu mengacu pada waktu yang dibutuhkan untuk menjalankan sebuah program. Jelas, sebuah program yang berjalan lebih cepat dikatakan lebih baik dari sudut pandang efisiensi-waktu. Program yang ditulis dalam bahasa assembly cenderung berjalan lebih cepat daripada yang ditulis dalam bahasa tingkat tinggi. Namun, kadang-kadang compiler membangkitkan kode yang mengeksekusi lebih cepat daripada kode Bahasa assembly kerajinan tangan.
Instruksi mesin dan program | 5 Pemahaman proses kerja perangkat keras. Saat ini, bahasa assembly digunakan terutama untuk manipulasi langsung ke perangkat keras, akses ke instruksi-instruksi khusus yang terdapat pada prosesor, atau untuk mengatasi masalah kinerja kritis. Penggunaan khas adalah padadriver perangkat (device driver), sistem tertanam (embedded system) tingkat rendah, dan sistem waktu-nyata (real-time system). Bahasa assembly adalah sangat dekat dengan prosesor. Bahasa assembly sangat baik untuk optimasi kecepatan. Ini semua tentang kinerja dan efisiensi. Bahasa assembly memberi anda kendali penuh atas sumber daya sistem. Sama seperti jalur perakitan, Anda menulis kode untuk meletakkan nilai-nilai tunggal kedalam register, berurusan dengan alamat memori secara langsung untuk mengambil nilai-nilai atau pointer. Menulis dalam bahasa assembly adalah untuk memahami persis bagaimana prosesor dan memori bekerja sama untuk "membuat sesuatu terjadi ". Berhati-hatilah, bahasa assembly adalah samar (cryptic), dan ukuran aplikasi kode sumber jauh lebih besar daripada bahasa tingkat tinggi. Tapi setelah dikompilasi menjadi bahasa mesin bisa menjadi sangat kecil dibanding hasil kompilasi bahasa tingkat tinggi. 1.1.3. Bahasa Transfer Register Bahasa transfer register (Register transfer language - RTL) adalah sebuah notasi yang digunakan untuk menentukan transfer mikro-operasi antar register. RTL adalah sebuah deskripsi yang digunakan untuk menjelaskan tingkahlaku instruksi dan organsasi sebuah komputer. Misalnya, pernyataan/statement RTL R3:= R1 menunjukkan suatu transfer register sederhana yang melibatkan dua register Ri dan R3. Aksi statement tersebut yaitu isi register R1 ditransfer
6 | Ayu Andini & Arya Gading (disalin) ke register R3. Statement RTL.tersebut dapat juga dituliskan dengan (R 3 leftarrow [R_{1}] Mikrooperasi dikelompokkan ke dalam empat tipe • Mikro-operasi transfer register: adalah menyalin isi salah saturegister ke register lain tanpa mengubah isi sumber. • Mikro-operasi aritmetika: melakukan operasi aritmetika pada datadalam register: penjumlahan, pengurangan, increment, decrement danpergeseran adalah mikrooperasi yang umum. Penjelasan hal inidiberikan pada Tabel 1.1. • Mikro-operasi logika: melakukan operasi manipulasi bit pada datadalam register. Mikrooperasi ini digunakan untuk pembuatankeputusan logika dan juga untuk manipulasi bit dari data biner. • Mikro-operasi pergeseran: melakukan operasi pergeseran pada datadalam register. Mikrooperasi ini ada tiga macam: operasi geser logika,operasi geser melingkar (disebut juga rotasi) dan operasi geser aritmetika
Instruksi mesin dan program | 7 Tabel 1.1 Mikro-Operasi Aritmetika 1.1.4. Jumlah Pengalamatan dan Desain CPU Salah satu cara tradisional dalam menjelaskan arsitektur CPU (prosesor) adalah dalam hal jumlah alamat yang terdapat dalam setiap instruksi. Dimensi ini menjadi kurang signifikan dengan bertambahnya kompleksitas desain prosesor. Namun demikian, No Notasi RTL keterangan 1 R5←[R1 + R3] Isi register R1 dan R3 dijumlahkan dan hasilnya disimpan di R5 2 R5←[R1 – R3] Isi R3 dikurangkan dari isi R1 dan hasilnya di R5 3 R3←[R3] Isi R3 dikomplemenkan 4 R3←[R3]+1 Isi R3 diubah ke komplemenkan -2 5 R5←[R1]+[R3]+1 Isi R1 ditambahkan dengan komplemen -2 dari R3 6 R1←[R1]+1 Isi R1 di-increment 1 7 R1←[R1]-1 Isi R1 di-decrement 1
8 | Ayu Andini & Arya Gading berguna pada masalah ini untuk menggambarkan dan menganalisis perbedaan ini. Berapa maksimum jumlah alamat yang dibutuhkan oleh sebuah instruksi? Kenyataannya, instruksi-instruksi aritmatika dan logika akan membutuhkan operand yang paling banyak. Secara virtual semua operasi aritmatika dan logika adalah unary (satu operandsumber) atau binary (dua operand sumber). Sehingga kita akan membutuhkan maksimum dua alamat untuk mengacu pada operand-operand sumber. Hasil suatu operasi harus disimpan, disarankan ada alamat ketiga yang menetapkan operand tujuan. Akhirnya setelah sebuah instruksi selesai dieksekusi, maka instruksi berikutnya harus diambil, dan alamatnya dibutuhkan. Pemilihan set instruksi komputer tergantung pada cara CPU disusun. Secara tradisional, ada empat organisasi CPU dengan instruksi-instruksi spesifik tertentu: 1. Mesing-alamat 2. Mesin2-alamat 3. Mesin1-alamat (CPU berbasis akumulator) 4. Mesin0-alamat (CPU berbasis Stack) 1.1.5. Arsitektur Load/Store Dalam arsitektur Load/Store, instruksi beroperasi pada nilai-nilai yang disimpan dalam register prosesor internal. Hanya instruksi Load dan Storeyang melakukan transfer data antara register dan memori. Mesin RISC serta prosesor vektor menggunakan arsitektur ini, yang mengurangi ukuran instruksi secara substansial. Jika kita mengasumsikan bahwa panjang opcode 8-bit, panjang alamat 32 bit, dan untuk register 5 bit, maka sebuah instruksi dengan tiga operand dalam memori membutuhkan 104 bit sedangkan operand-
Instruksi mesin dan program | 9 operand berbasis register membutuhkan instruksi 23 bit. 1.2. KARAKTERISTIK EKSEKUSI INTRUKSI Ada dua konsep popular yang berhubungan dengan desain CPU dan set instruksi: • Complex Instruction Set Computing (CISC) • Reduce Instruction Set Computing (RISC) Semua sistem yang lama pada (komputer mainframe, komputer mini atau komputer mikro) relatif mempunyai sistem CISC. Walaupun sistem sekarang terdiri dari kedua jenis tersebut. Sistem RISC saat ini lebih populer karena tingkat kinerjanya, dibandingkan dengan sistem CISC. Namun demikian karena biayanya tinggi, sistem RISC hanya digunakan ketika diperlukan kecepatan khusus, keandala, dan sebagainya. Karakteristik CISC: • Set instruksi besar • Operasi-operasinya kompleks • Mode-mode pengalamatan kompleks • Perangkat keras kompleks, waktu eksekusi panjang/lama • Instruksi yang dibutuhkan dalam suatu pekerjaan jumlahnya minimum/sedikit • Mudah diprogram, kompiler sederhana Karakteristik RISC: • Set instruksi kecil. • Instruksi sederhana sehingga dapat memberikan eksekusi cepat (beberapa langkah).
10 | Ayu Andini & Arya Gading • Kedua operand (operand sumber dan operand target) harus berada pada register yang mengizinkan waktu pengambilan instruksi lebih singkat. Jumlah register besar. • Hanya instruksi baca/tulis (load/store) yang dapat mengakses memori utama, satu akses memori utama untuk setiap instruksi. Operand untuk instruksi aritmatika seperti "ADD" tersedia di register dan bukan di memori. Demikian halnya hasil instruksi "ADD" disimpan di register bukan di memori. Jadi instruksi "LOAD" akan mendahului instruksi "ADD" dan instruksi "STORE" akan mengikuti instruksi "ADD", jika diperlukan. Karena itu compiler akan memberikan banyak instruksi "LOAD" dan "STORE". • Mode pengalamatan sederhana sehingga mengizinkan kalkulasi alamat yang cepat. . • Instruksi mempunyai panjang-tetap dengan beberapa format dan field yang sejajar sehingga mengizinkan penerjemahan instruksi yang cepat. • Pekerjaan-pekerjaan yang kompleks dibangun oleh kompiler dengan operasioperasi sederhana, dengan kompleksitas kompiler yang tinggi dan waktu pengkompilasian. • Implementasi perangkat keras lebih sederhana dan lebih cepat, khususnya cocok untuk arsitektur pipeline. Seorang arsitek komputer harus bisa mempertimbangkan aspek-aspek berikut ini sebelum menyelesaikan set instruksi:
Instruksi mesin dan program | 11 1. Kenyamanan Pemrograman: Jumlah instruksi; pemrogram lebih suka mempunyai sebanyak mungkin instruksi agar operasi yang dapat dikerjakan oleh rangkaian instruksi. Tetapi, jika terlalu banyak instruksi dalam set instruksi menghasilkan desain unit kontrol yang kompleks. Pendekodean instruksi memerlukan sirkuit dan waktu yang besar. 2. Pengalamatan yang fleksibel: Pemrogram senang jika memungkinkan semua mode pengalamatan operand ada di dalam arsitektur. Hal ini dapat memberikan fleksibilitas yang banyak kepada pemrogram. Walaupun desain unit kontrol menjadi kompleks. 3. Jumlah General Purpose Register (GPR): Jika CPU mempunyai register yang banyak, maka pemrogram memperoleh pemrosesan dan transfer data yang cepat. Tetapi biaya pada perangkat keras CPU meningkat dengan banyaknya GPR. 4. Target segmen pasar: Sasaran bidang aplikasi pada komputer memerlukan operasi-operasi khusus untuk pemrosesan data yang efisien. Komputer saintifik harus mempunyai aritmetika floating-point yang tingkat presisinya baik/tidak terlalu jelek. Sedangkan komputer bisnis harus mendukung aritmetika desimal, komputer hiburan harus mempunyai operasi-operasi multimedia. 5. Kinerja Sistem: Jika sebuah program mempunyai instruksi yang sedikit, kinerja sistem meningkat karena waktu yang digunakan oleh CPU dalam pengambilan instruksi berkurang. Maka untuk program yang pendek, instruksi yang digunakan harus instruksi kompleks. Sehingga instruksi
12 | Ayu Andini & Arya Gading tunggal harus dapat melakukan beberapa mikrooperasi. Pemrogram menyadari hal ini mengurangi ukuran program. Tapi di sisi lain menambah kompleksitas unit kontrol dan waktu eksekusi instruks Konsep modern arsitektur RISC tidak mendukung instruksi-instruksi kompleks, walaupun semua komputer lama yang berbasis CISC menggunakan instruksi-instruksi kompleks. Secara tradisional, superioritas suatu komputer ditentukan pada basis set instruksi nya. Jumlah total instruksi dan ketangguhan yang dimilikinya menjadi sangat penting karena dua faktor tersebut berkontribusi pada efisiensi komputer. Program yang efisien adalah bila pendek dan menempati ruang memori yang sedikit. Waktu eksekusi juga merupakan faktor kunci. Kecenderungan sekarang adalah mengikuti penggunaan instruksi-instruksi sederhana yang menghasilkan unit kontrol yang sederhana. Sirkuit CPU lebih penting dari ukuran memori. Sehingga kecepatan CPU meningkat pada pemrosesan instruksi dari arsitektur RISC. 1.2.1. Format dan Panjang Instruksi Secara umum format instruksi terdiri dari kode operasi (opcode) dan operand/alamat. Jumlah operand sebuah instruksi bervariasi, yaitu instruksi 3alamat, instruksi 2-alamat, instruksi 1-alamat, dan instruksi o-alamat (lihat Gambar 1.1). Sebuah instruksi umumnya dapat memberikan informasi-informasi berikut: 1. Operasi yang akan dikerjakan oleh instruksi. 2. Operand (data) yang harus dioperasikan. 3. Lokasi (memori atau register) yaitu hasil operasi harus disimpan.
Instruksi mesin dan program | 13 4. Lokasi memori di mana instruksi berikutnya harus diambil Gambar 1.1 format instruksi: 3-alamat, 2-alamat, 1- alamat dan 0-alamat Ukuran opcode memberikan informasi jumlah operasi yang dapat ditangani oleh sebuah prosesor yang terdapat dalam set instruksi. Misalnya jika opcode panjangnya 4 bit, maka jumlah operasi yang dapat ditangani adalah 2’4=16 operasi (dengan kode oooob, 0001b, 0010b, 1111b). Operand merupakan alamat penyimpanan atau lokasi data berada. Panjang instruksi sangat menentukan pada seberapa besar memori yang dibutuhkan oleh suatu instruksi. Instruksi yang terlalu panjang mempunyai kekurangan: 1. Instruksi yang menempati ruang memori yang lebih besar, dapat meningkatkan kebutuhan memori sistem. 2. Lebar bus data besar atau pengambilan instruksi lebih memakan waktu. Kondisi pertama menambah Opcode Operand1 Operand2 Operand3 Format instruksi 3 alamat Opcode Operand1 Operand2 Format instruksi 2 alamat Opcode Operand Format instruksi 1 alamat Opcode Format instruksi 0 alamat
14 | Ayu Andini & Arya Gading biaya perangkat keras sedangkan yang kedua menambah waktu siklus instruksi. Instruksi yang terlalu pendek mempunyai kekurangan: 1. Terlalu banyak instruksi di dalam program. Karena itu banyak waktu yang terbuang untuk fase pengambilan instruksi. 2. Ukuran program bertambah. Karena itu kebutuhan memori bertambah. 1.2.2. Panjang Instruksi Variatif Penyeragaman panjang instruksi seperti pada RISC (reduce instruction set computer), akan menyebabkan pemborosan ruang memori. Hal ini karena ada beberapa instruksi sederhana seperti HALT, NOOP dan sebagainya yang hanya mempunyai opcode saja dan karena itu sisa ruang yang ada pada instruksi tersebut tidak terpakai. Selain itu, juga menimbulkan pemborosan waktu pada fase pengambilan instruksi lengkap. Karena itu secara praktis, instruksi-instruksi komputer panjangnya tidak sama. Beberapa di antaranya ada yang pendek (satu byte, dua byte) dan yang lainnya ada yang panjang (tiga byte dan lebih). Opcode instruksi umumnya mengkodekan informasi mengenai panjang instruksi. Dengan melihat pada opcode, CPU dapat memutuskan operasi-operasi baca memori tambahan yang dibutuhkan untuk pengambilan instruksi seutuhnya. Pemrogram senang jika mempunyai beragam panjang instruksi untuk CPU, misalnya memberikan fleksibilitas kepada pemrogram dan juga menghemat ruang memori. Namun, terdapat kerugian pada sistem ini karena desain CPU menjadi kompleks. Sebaiknya mesin mampu melakukan perluasan dan penciutan urutan pengambilan instruksi yang berdasarkan pada opcode seperti yang ditunjukkan pada Gambar 1.2.
Instruksi mesin dan program | 15 Gambar 1.2 urutan pengambilan instruksi pada instruksi dengan Panjang bervariasi 1.2.3. Lokasi Operand Sumber dan Operand Hasil Ada beberapa pilihan dalam menempatkan operandsumber (lokasi operand) yaitu pada: • Memori utama • Register • Port masukan • dan pada instruksi itu sendiri Penyimpananoperandsumber dalam register lebih efektif daripada mengambilnya dari memori utama karena waktu akses register lebih singkat. Hasil ini mengurangi waktu siklus instruksi. Penempatan operandsumber dalam instruksi digunakan untuk P1 tersisa beberapa byte Panjang instruksi Semua byte diambil ( = P1) kurang dari Baca word instruksi Analisis Opcode Baca 1 word atau lebih Penyelesaian baca instruksi Ke fase eksekusi Analisis Opcode
16 | Ayu Andini & Arya Gading instruksi-instruksi khusus saja. Isi suatu port dapat digunakan sebagai operandsumber seperti halnya isi suatu lokasi memori. Ada beberapa instruksi yang tidak mempunyai operand. Contoh yang khas adalah instruksi HALT dan NOOP. Ada beberapa instruksi yang berfungsi untuk menguji status komponenkomponen perangkat keras seperti register, flip-flop, lokasi memori dan sebagainya. Pada kasus ini, tidak terdapat operand. Demikian ada beberapa instruksi yang hanya dapat mencari sejumlah sinyal eksternal. Ada beberapa pilihan dalam menyimpan operand hasil pemrosesan instruksi yaitu: • memori utama • register • port keluaran Beberapa instruksi seperti HALT dan NOOP secara eksplisit tidak mempunyai hasil untuk disimpan sedangkan beberapa instruksi hanya men set atau mereset flipflop atau register. 1.2.4. Tipe Operand Instruksi-instruksi prosesor hanya mendukung pengoperasian tipe data-data dasar. Kategori umum data yang paling penting adalah: • Alamat • Bilangan • Karakter • Data logika Alamat merupakan sebuah bentuk data. Dalam banyak kasus, beberapa kalkulasi harus dikerjakan terhadap acuan operand dalam instruksi untuk menentukan alamat memori utama atau memori virtual.
Instruksi mesin dan program | 17 Pada konteks ini, alamat dapat dipandang sebagai bilangan bulat tidak bertanda. Tipe data dasar lainnya adalah bilangan, karakter, dan data logika. Di samping itu, beberapa mesin menetapkan tipe data khusus atau strukturstruktur data. Misalnya, mungkin ada operasi-operasi mesin yang mengoperasikan secara langsung sebuah daftar atau string karakter-karakter. 1.2.5. Urutan Penyimpanan Little-Endian dan Big- Endian Ada dua metode konvensi yang diikuti untuk penempatan informasi dalam memori dan pengalamatan yaitu: penetapan dengan big-endian dan little endian. Anggap kita mempunyai sebuah informasi 32-bit 12345678 (hexa) yang akan disimpan di dalam lokasi memori 1000 ke atas. Karena terdapat 4-byte, maka informasi menempati alamat 1000, 1001, 1002, dan 1003. Pada metode big-endian, MSB(most significant byte) disimpan pada alamat bawah dan LSB (least significantbyte) disimpan pada alamat atas. Pada metode little-endian, LSB (least significant byte) disimpan pada alamat bawah dan MSB (most significant Byte) disimpan pada alamat atas. Susunan alamat-alamat memori dan byte diperlihatkan pada Gambar 1.3. 1000 1001 1002 1003 Little endian 78 56 34 12 Big endian 12 34 56 78
18 | Ayu Andini & Arya Gading Gambar 1.3 penyimpanan 12345678 dengan LittleEndian dan Big-Endian Jika kita mempunyai data 64-bit (8-byte), maka 4-byte dan sisanya dilanjutkan dari alamat 1004 ke atas dengan menggunakan cara yang sama. Beberapa komputer hanya dapat menangani satu metode dan beberapa yang lainnya dapat menangani kedua metode tersebut. Metode big-endian lebih natural pada sebagian besar orang karena lebih mudah untuk membaca posisi hex. Dengan mempunyai high-order byte yang ada di awal, anda dapat selalu menguji apakah sebuah bilangan positip atau negatip dengan melihat byte pada offset nol (bandingkan pada little- endian di mana anda harus mengetahui berapa panjang bilangan yang ada dan anda harus melakukan skip terhadap sejumlah byte untuk mendapatkan posisi informasi bit tanda tersebut). Mesin big-endian menyimpan integer dan string dengan urutan yang sama dan tentunya lebih cepat dalam operasi-operasi string. Pada umumnya bitmapped graphic dipetakan dengan skema" most significant bit sebelah kiri" yang artinya bahwa bekerja dengan elemen-elemen grafis yang lebih besar dari satu byte akan dapat ditangani dengan arsitektur ini dengan baik. Hal ini merupakan salah satu keterbatasan kinerja untuk mesin-mesin little-endian karena mereka harus membalik dulu urutan byte bila bekerja dengan objek grafis yang besar. Namun demikian, big-endian juga mempunyai kelemahan. Konversi dari sebuah alamat integer 32-bit menjadi alamat integer melakukan penambahan. Aritmetika presisi tinggi pada mesin little-endian lebih cepat dan lebih mudah. Umumnya arsitektur yang menggunakan metode big-endian tidak membolehkan
Instruksi mesin dan program | 19 word menulis pada area alamat non word (misalnya jika sebuah word adalah 2 byte atau 4 byte, dia harus dimulai pada alamat byte nomor genap). Hal ini memboroskan Arsitektur little-endian seperti pada INTEL, membolehkan pembacaan dan penulisan alamat ganjil, yang membuat pemrograman pada mesin ini lebih mudah. Catatan bahwa INTEL harus menambahkan suatu instruksi untuk membalik urutan byte di dalam register tepat 16-bit. 1.2.6. Tipe Instruksi Instruksi-instruksi diklasifikasikan dalam tipe yang berbeda berdasarkan faktorfaktor berikut: 1. Opcode: yaitu kode operasi yang harus dikerjakan oleh instruksi 2. Data: tipe data: biner, desimal dan sebagainya 3. Lokasi operand: memori, register dan sebagainya 4. Pengalamatan operand: metode penentuan lokasi operand (alamat) 5. Panjang instruksi: misal satu byte, dua byte dan sebagainya 6. Jumlah medan alamat: nol alamat, satu alamat, dua alamat dansebagainya Tidak ada komputer yang mempunyai set instruksi yang sama. Hampir setiap komputer mempunyai instruksi yang unik serta menarik pemrogram. Arsitek komputer memberikan perhatian pada pembentukan set instruksi karena melibatkan pemrogram dan mesin komputer. Instruksi- instruksi dapat diklasifikasikan ke dalam delapan tipe: 1. Instruksi transfer data: instruksi ini menyalin data dari satu 2
20 | Ayu Andini & Arya Gading 2. Instruksi aritmetika: instruksi ini yaitu melakukan operasi-operasi aritmetika. 3. Instruksi logika: instruksi ini melakukan beberapa operasi-operasi logika Boolean 4. Instruksi transfer kontrol: instruksi ini melakukan beberapa modifikasi/mengubah urutan eksekusi program 5. Instruksi I/O: instruksi ini melakukan transfer informasi antara peripheral eksternal dan inti sistem (CPU/memori). 6. Instruksi manipulasi string: instruksi ini melakukan suatu manipulasi string byte, word, double word dan sebagainya. 7. Instruksi Translate: instruksi ini melakukan suatu konversi data dari satu format ke format lain. 8. Instruksi kontrol prosesor: instruksi ini melakukan beberapa kontrol operasi prosesor Pada Tabel 1.2 diberikan beberapa contoh instruksi untuk setiap tipe instruksi. Karena pabrik komputer mempunyai suatu dokumentasi/notasi instruksi masing-masing yang saling berbeda, maka diberikan mnemonic sederhana untuk mewakili secara komprehensif. Tabel 1.2 contoh Tipe Instruksi No Type Instruksi Nama Aksi 1 Transfer data MOVE Mentransfer data dari lokasi sumber ke lokasi tujuan
Instruksi mesin dan program | 21 LOAD Mentransfre data dari lokasi memori ke register CPU STOR E Mentransfer data dari dan untuk register CPU ke lokasi memori PUSH Mentransfer data dari sumber ke stack (puncak) POP Mentransfer data dari stack (puncak) ke tujuan XCHG Tukar; menukar isi sumber dan tujuan CLEA R Reset tujuan dengan semua bit ‘o’ SET Set tujuan dengan semua bit ‘1’ 2 Aritmeti ka ADD Jumlah; menghitung jumlah dari dua operand ADC Jumlah dengan carry; hitung jumlah dari dua operand dan bit ‘carry’ SUB Kurang; hitung selisih dua bilangan
22 | Ayu Andini & Arya Gading SUBB Kurang dengan borrow; menghitung selisih dengan ‘borrow’ MUL Perkalian; menghitung hasil kali dari dua operand DIV Pembagian; hitung hasil bagi dan sisa pembagian dari dua bilangan NEG Negate; ganti tanda operand INC Increment; tambahkan 1 pada operand DEC Decrement; kurangkan 1 dari operand SHIFT A Shift arithmetic; menggeser operand(ke kiri atau kanan) dengan tanda 3 Logika NOT Komplemenkan (komplemen 1) operand OR Lakukan operasi logika OR pada operand AND Lakukan operasi logika AND pada operand XOR Lakukan operasi logika yaitu ‘exclusive-OR’ pada operand
Instruksi mesin dan program | 23 SHIFT Geser operand (ke kiri atau kanan) isi bit kosong dengan ‘o’ ROT Rotasi; geser operand (ke kiri atau ke kanan) dengan berputar TEST Uji kondisi yang ditetapkan dan pengaruhi flag yang relevan 4 Transfer kontrol JUMP Branch; masukkan Alamat yang ditetapkan ke PC; cabang tak bersyarat (unconditional transfer) JUMPI F Bercabang dengan kondisi; masukkan Alamat yang ditetapkan ke PC hanya jika kondisi yang ditetapkan terpenuhi;conditional transfer JUMP SUB CALL; simpan ‘program control status’ yang sekarang dan masukkan Alamat yang ditetapkan ke PC RET RETURN; unsave(restore) ‘program kontrol status’ (dari stack) ke PC dan register/flag yang relevan lainnya.
24 | Ayu Andini & Arya Gading INT Interupsi; melakukan interupsi perangkat lunak; simpan ‘status kontrol program’ (ke stack) dan masukkan Alamat sesuai dengan kode yang ditetapkan(vector) ke PC IRET Interrupt return; ambil Kembali ‘status program kontrol’ dari stack ke PC serta register-register dan flag yang relevan lainnya LOOP Iterasi;turunkan(decrement ) isi register dengan 1 dan uji non-zero; jika tercapai, masukkan Alamat yang ditetapkan ke PC 5 Instruksi inputoutput IN Input; baca data dari port/device yang ditetapkan ke register yang ditetapkan atau yang terlibat OUT Output; tulis data dari register yang ditetapkan atau yang terlibat ke suatu port/device TEST I/O Baca status dari subsistem I/O dan ke set kondisi flag
Instruksi mesin dan program | 25 STAR T I/O Sinyal processor I/O (data channel) untuk memulai program I/O (perintah untuk program I/O) HALT I/O Sinyal prosessor I/O (data channel) untuk membatalkan program I/O (perintah untuk operasioperasi I/O) dalam progress 6 Manipul asi string MOVS Menyalin (move) byte atau word string LODS Menyalin (load) byte atau word string CMPS Bandingkan byte atau word string STOS Menyimpan (store) byte atau word string SCAS Scan byte atau word string 7 Translat e XLAT Translate; ubah kode yang diberikan ke bentuk yang lain dengan tabel lookup HLT Halt; hentikan siklus instruksi (pemrosesan) STI (EI) set interrupt (enable interrupt); menset interrupt enable flag ke ‘1’ CLI (DI) Clear interrupt (disable interrupt); mereset interrupt enable flag ke ‘o’
26 | Ayu Andini & Arya Gading WAIT Penghentian siklus instruksi hingga suatu kondisi terpenuhi (seperti sinyal input menjadi aktif) NOOP No operation; nothing CMC Komplemen carry flag CLC Jadikan ‘o’ carry flag STC Jadikan ‘1’ carry flag 1.3. MODE PENGALAMATAN INSTRUKSI Penempatan operand instruksi yang lazim digunakan yaitu pada lokasi memori utama dan register CPU. Jika operand ditempatkan pada memori utama, maka alamat lokasi harus diberikan oleh instruksi ke dalam medan operand. Tidak perlu memberikan alamat secara eksplisit pada instruksi. Banyak metode berguna yang dipakai untuk menentukan alamat operand. Mode yang berbeda dalam penentuan alamat operand dalam instruksi dikenal dengan addressing mode (mode pengalamatan). Suatu komputer bisa saja dak menggunakan semua mode pengalamatan tersebut. Mode pengalamatan yang populer adalah: • Mode Pengalamatan Immediate • Mode Pengalamatan Register • Mode Pengalamatan Register Indirect • Mode Pengalamatan Index • Mode Pengalamatan Relative • Mode Pengalamatan Stack Mengapa kita perlu begitu banyak mode pengalamatan? Beberapa mode pengalamatan memberikan fleksibilitas pada pemrogram dalam
Instruksi mesin dan program | 27 program yang efisien (singkat dan cepat). Berikut adalah tujuan - mempengaruhi arsitek komputer ketika memilih mode pengalamatan: 1. Mengurangi panjang instruksi dengan cara mempunyai medan yang pendek untuk alamat. 2. Menyediakan bantuan yang tangguh kepada pemrogram untuk penanganan data kompleks seperti pengindeksan sebuah array, control oop, relokasi progam dan sebagainya. 1.3.1. Mode Pengalamatan Immediate Gambar 1.4 ilustrasi operand-K. Mode pengalamatan immediate merupakan mode pengalamatan yang paling sederhana, yang mana nilai operand berada pada instruksi itu sendiri (lihat ilustrasi Gambar 1.4), operand-K. Pada contoh yang diberikan berikut adalah dalam statement bahasa assembly. • MOV AX,1234H ; AX1234H, isikan atau salin nilai 1234 heksadesimal ke register AX • ADD DL,25 ; AL 25, Tambahkan nilai 25 desimal ke register DL • LDI R16,0b11001110; R16+- ob11001110, salin nilai 11001110 biner ke register R16 Opcode Operand Operrand = k (k = konstanta) Contoh : MOV AX,1234H:AX = 1234H (operand = k = 1234H)
28 | Ayu Andini & Arya Gading • MOV UNIKOM,10001100b ;UNIKOM 10001100b, salin nilai 10001100b ke dalam alamat offset memori yang bernama UNIKOM. Keuntungan: operand yaitu tersedia di dalam instruksi setelah pengambilan instruksi berakhir. Karena itu siklus instruksi lebih cepat. Kelemahan: nilai operand itu dibatasi oleh Panjang medan operand dalam instruksi tersebut. Praktik pemrograman kurang fleksibel, karena setiap perubahan nilai operand harus memerlukan perubahan pada instruksi. 1.3.2. Pengalamatan Direct Gambar 1.5 pengalamatan Direct. Karena alamat operand secara eksplisit diberikan di dalam instruksi, mode ini disebut mode pengalamatanlangsung(direct), AE= K (K adalah alamat operand) (lihat Gambar 1.5). Contoh statement bahasa assembly berikut memberikan ilustrasi mode ini: • MOV AL,DS:[1234H]; AL DS: [1234h], Salin nilai dari alamat offset 1234 hex ke register AL. Opcode k memori AE = K (AE = Alamat efektif K = konstanta) Contoh : MOV AL,DS:[1234H];AL=DS[1234H] (AE = K = 1234H) operand
Instruksi mesin dan program | 29 • LDS R16,0x0070; R16 [0x0070], salin nilai dari alamat 0070 hex ke register R16 • JUMP X Transfer kontrol program ke instruksi pada lokasi memori X dengan cara mengisikan X ke PC (X bukan operand tetapi alamat pencabangan) Keuntungan: Karena alamat operand tersedia langsung dalam instruksi, maka tidak dibutuhkan lagi langkah kalkulasi alamat operand. Oleh karena itu waktu siklus instruksi berkurang. Kekurangan: Jumlah bit dalam alamat operand dibatasi oleh medan operand dalam instruksi tersebut. 1.3.3. Pengalamatan Indirect Gambar 1.6 pengalamatan indirect. Karena mode pengalamatan indirect dapat melalui sebuah lokasi memori atau register, maka dapat dilakukan dengan dua cara, yaitu: • Pengalamatan tak-langsung memori: yaitu berfungsi jika sebuah lokasi memori digunakan untuk menyimpan alamat operand. operand k operand y AE = K (AE = Alamat efektif, K = konstanta) Contoh instruksi: MOVE (K), R1; (K) R1
30 | Ayu Andini & Arya Gading • Pengalamatan tak-langsung register: yaitu jika sebuah register digunakan untuk menyimpan alamat operand. Instruksi memberikan alamat lokasi (K), di mana lokasi ini berisi alamat lokasi lain (Y) yang merupakan lokasi operand (lihat Gambar 1.6). Hal ini dapat direpresentasikan sebagai berikut: (K)=Y, dan(Y) = operand Y dikenal sebagai pointer. Nilai Y (alamat) dapat diganti secara dinamis dalam suatu program tanpa mengganti instruksi dengan cara melakukan modifikasi sederhana pada isi lokasi K. Pengalamatan indirect yang multi- level dapat dimungkinkan. Contoh berikut adalah ilustrasi pengalamatan indirect: • MOVE (X), RI→ isi dari lokasi yang mempunyai alamat X disalin ke register R1. Keuntungan: Mempunyai fleksibiltas dalam pemrogram; perubahan yang dilakukan dalam alamat selama progam berjalan tanpa mengubah isi instruksi. Kelemahan: Waktu siklus instruksi bertambah karena dua akses memori dibutuhkan untuk sebuah pengalamatan indirectdengan level tunggal. 1.3.4. Pengalamatan Register Gambar 1.7 pengalamatan register. opcode r memori operand AE = R (AR = Alamat efektif, R = register) Contoh instruksi: MOV AX,BX; AX BX
Instruksi mesin dan program | 31 Secara konseptual, pengalamatan register mirip dengan pengalamatan direct kecuali lokasi memori digantikan dengan register untuk menyimpan operand. Instruksi berisi nomor register yang mempunyai operand. Mode pengalamatan ini sangat berguna untuk program yang panjang dalam penyimpanan hasil-hasil sementara di dalam register daripada di dalam memori. Contoh berikut adalah ilustrasi mode pengalamatan register: • MOV AX,BX ; AX+[BX], salin isi register BX ke AX • ADD R1 R2; R1 [R1]+[R2], jumlahkan isi register Ri dan Ra da hasilnya disimpan di Ri. Kedua operand menggunakan pengalamata register. • STORE R1,MEM1 : MEMI [R], salin isi register Ri ke alam memori MEM1; operand pertama menggunakan pengalamatan registerdan operand kedua menggunakan pengalamatan langsung. Keuntungan: sekarang pengambilan operand lebih cepat tanpa mengakses memori. Kelemahan: Jumlah register terbatas, oleh karena itu utilisasi efektif oleh programmer merupakan hal yang esensial.
32 | Ayu Andini & Arya Gading 1.3.5. Pengalamatan Register Indirect Gambar 1.8 pengalamatan register indirect. Pada mode pengalamatan register indirect, register digunakan untuk menjaga alamat memori operand. Jadi register bertindak sebagai register alamat memori. Mode ini sangat berguna untuk pengaksesan cepat dari lokasi memori utama seperti array. Instruksi dengan pengalamatan register indirectadalah merupakan bagian dari loop. Langkah pertama, alamat awal dari array disimpan di dalam register. Bila instruksi ditemukan pertama, entry pertama dari array diakses. Kemudian isi register ditambah satu oleh instruksi lain dalam loop, sebelum mendapati instruksi pengalamatanregister indirect. • MOV AL,[BX] ;AL [[BX]], salin data yang alamatnya berada dalam register BX ke AL • LD R16, R16-((Z)], salin data dari memori yang alamatnya berada pada register Z ke R16 opcode r register y AE = R (AR = Alamat efektif, R = register) Contoh instruksi: MOV AL;[BX]; AX [BX] memori operand
Instruksi mesin dan program | 33 Keuntungan: yaitu pemanfaatan efektif panjang instruksi, karena nomor register ditentukan dengan sejumlah bit. 1.3.6. Pengalamatan Displacement Gambar 1.9 pengalamatan indirect. Pada mode pengalamatan displacement, alamat operand diperoleh dengan menambahkan sebuah konstanta ke suatu base register. Contoh: • MOV AL[BP+05H] ;AL+ [[BP]+05H] • LDDR16,Z+0x03 ;data alamat hasil penjumlahan ox03 dengan nilai dalam regiter Z disalin ke R16 opcode r k register y AE = R +K (AR = Alamat efektif, R = register) Contoh instruksi: MOV AL, [BP+05H]; AL [BP+05H] operand
34 | Ayu Andini & Arya Gading 1.3.7. Pengalamatan Index Gambar 1.10 pengalamatan indirect. Pada mode pengalamatan indeks, alamat operand diperoleh dengan menambahkan sebuah konstanta ke suatu register, yang disebut register indeks. Contoh: • LD R16,Z+; salin data dari memori yang alamatnya berada pada 7. ke R16, kemudian Z=Z+1. Umumnya medan alamat dalam instruksi berguna untuk memberikan alamat awal array dalam memori. Register indeks berisi nilai indeks' untuk operand yaitu selisih antara alamat awal dan alamat operand. Dengan mengubah nilai register indeks, maka operand dalam array dapat diakses. Umumnya operand-operand (elemen-elemen array) yang berada dalam lokasi yang berurutan. Mereka diakses dengan cara increment yang sederhana pada register indeks. Beberapa prosesor mendukung fitur 'autoindexing', yang melibatkan auto- incrementdan auto-decrement pada register indeks kapanpun suatu opcode k registrer AE = (PC) + K operand Contoh instruksi: LD R16,Z+; salin data memori yang alamatnya berada pada Z ke R16, kemudian nilai Z increment.
Instruksi mesin dan program | 35 instruksi dengan pengalamatan indeks dieksekusi. Hal ini mengurangi penggunaan instruksi terpisah dalam increment/decrement isi register indeks. Hal ini juga lebih mempercepat cara aksi serta lebih mengurangi ukuran program. Namun memberikan tanggungjawab tambahan 'autoindexing' pada unit kontrol. 1.3.8. Pengalamatan Relative Gambar 1.11 pengalamatan indirect. Pengalamatan relative sama seperti pengalamatan indeks kecuali register indeks diganti dengan program counter (PC) Instruksi ini mengisi Ri dengan kandungan lokasi memori yang alamatnya adalah hasil jumlah program counter (PC) dan nilai X. Pada mode pengalamatan ini, instruksi menetapkan alamat operand (lokasi memori) sebagai posisi relatif dari alamat instruksi sekarang yaitu isi PC. Karena operand terletak pada jarak pendek' dari isi PC. Umumnya mode ini digunakan untuk menetapkan alamat pencabangan dalam instruksi branch, alamat pencabangan berada dekat dengan alamat instruksi. opcode k Program center (PC) AE = (PC) + K memori operand Contoh RUMP LABEL ; lompat relative ke alamat (PC) + label
36 | Ayu Andini & Arya Gading • RJMP LABEL ;lompat relatif ke alamat (PC)+LABEL Keuntungan: Jumlah bit dalam medan alamat lebih sedikit. 1.4. KARAKTERISTIK EKSEKUSI INSTRUKSI Berikut ini merupakan karakteristik eksekusi instruksi, sebagai berikut: 1.4.1 Pipelining Pipelining adalah metode saat computer memproses instruksi secara bersamaan dalam tahapan berurutan. Ini meningkatkan throughput dan kecepatan eksekusi instruksi. 1.4.2 Cycles per Instruction (CPI) Metrik yang mengukur beberapa banyak siklus mesin yang dibutuhkan untuk mengeksekusi satu instruksi. Semakin rendah CPI, semakin efisien sistem dalam mengeksekusi instruksi. 1.4.3 Hazards Ada 3 jenis hazard yang berpengaruh dalam eksekusi instruksi, Data hazards Ketika instruksi membutuhkan data yang belum tersedia. Struktural hazards Ketika sumber daya perangkat keras yang diperlukan untuk instruksi tidak tersedia. Control hazards Ketika computer harus memilih antara beberapa jalur eksekusi. 1.4.4 Out-of-order Execution Computer modern menggunakan Teknik eksekusi instruksi diluar urutan aslinya untuk memaksimalkan penggunaan sumber daya
Instruksi mesin dan program | 37 perangkat keras dan menghindari penundaan akibat hazard. 1.4.5 Superscalar Execution Teknik dimana computer mampu menjalankan beberapa instruksi dalam satu siklus clock. Ini memungkinkan untuk eksekusi parallel yang lebih efisien. 1.4.6 Prediksi Cabang (Branch Prediction) komputer menggunakan algoritma prediksi cabang untuk memperkirakan jalur instruksi yang akan diambil dalam percabangan program. Hal ini membantu menghindari penundaan yang disebabkan oleh instruksi yang terjebak dalam cabang yang salah. 1.4.7 Reduced Instruction Set Computer(RISC) & Complex Instruction Set Computer(CISC) Karakteristik eksekusi instruksi bisa berbeda tergantung pada arsitektur komputer. RISC menggunakan set instruksi yang sederhana untuk meningkatkan kecepatan, sementara CISC memiliki set intruksi yang lebih kompleks dengan instruksi Tunggal yang dapat melakukan banyak operasi. 1.5. PERMASALAHAN DESAIN PENGALAMATAN 1.5.1 Addressing Conflict Terjadi saat dua atau lebih instruksi system berusaha mengakses lokasi memori atau register yang sama secara bersamaan. Ini bisa
38 | Ayu Andini & Arya Gading menyebabkan deadlock atau memperngaruhi performa sistem. 1.5.2 Overlapes Addressing Space Terjadi jika Alamat memori atau ruang Alamat dari beberapa elemen dalam system mungkin tumpeng tindih. Ini dapat menyebabkan kesulitan dalam mengelola akses dan mengakses data yang benar. 1.5.3 Flexibilitas Dalam beberapa kasus, Alamat memori atau pengalamatan data harus bisa berubah secara dinamis, seperti dalam system operasi atau aplikasi yang mungkin perlu memuat dan memproses data dari lokasi yang berubah-ubah. 1.5.4 Privasi dan keamanan Perlu memastikan bahwa pengguna atau program hanya memiliki akses ke Alamatalamat yang seharusnya mereka akses, karena melibatkan mekanisme otorisasi, hak akses dan kebijakan keamanan yang tepat. 1.5.5 Efisien Addressing Melibatkan bagaimana akses memori dapat dioptimalkan, termasuk mempertimbangkan cache, akses pipelining dan pengelolaan memori virtual yang efisien. 1.5.6 Fragmentasi Memory Dapat mengurangi efisiensi dan kapasitas memori. Penting untuk mempertimbangkan cara menghindari atau mengatasi fragmentasi internal dan eksternal.
Instruksi mesin dan program | 39 1.5.7 Protabilitas Pertimbangkan masalah protabilitas dalam desain pengalamatan dengan cara mengelola perbedaan dalam ukuran data dan Alamat antara arsitektur yang berbeda.
40 | Ayu Andini & Arya Gading Daftar Pustaka Syahrul, & Abdullah Basalamah. (2016). Desain Digital & Arsitektur Komputer (Edisi Pertama). Informatika Bandung.
Instruksi mesin dan program | 41 Tentang Penulis Saya Muhammad Arya Gading saya lahir di Kuningan pada 23 Desember 2003 saya tinggal di daerah pusat kota kuningan di Jalan Pramuka No. 252 rt 10 rw 03. Pendidikan terakhir saya yaitu bersekolah di SMA N 1 Kuningan yang lulus pada tahun 2022. Sekarang saya sedang mengampu perkulilahan di Universitas kuningan saya masuk Fakultas Ilmu Komputer dan mengambil prodi Sistem Informasi, kegiatan sehari – hari saya biasa melakukan kegiatan perkuliahan dan bekerja di bidang jasa pembuatan kaos dan hobi saya senang di dunia otomotif pada sepeda motor, moto hidup saya “jadilah manusia yang bermanfaat untuk orang lain jika tidak bisa dengan Tindakan maka jadilah pendengar yang baik” Saya Ayu Andini saya lahir di Kuningan pada 06 Februari 2004. Saya tinggal di desa yang berada di daerah Kuningan yaitu Desa Muncangela. Pendidikan terakhir saya yaitu bersekolah di SMA N 1 Ciawigebang dan lulus pada tahun 2022. Sekarang saya sedang menempuh pendidikan di Universitas Kuningan mengambil prodi Sistem Informasi.