11/25/2015 Tahun Akademik 2015/2016 Semester I DIG1B3 – Konfigurasi Perangkat Keras Komputer SAP-3 Mohamad Dani (MHM) E-mail: [email protected] Hanya dipergunakan untuk kepentingan pengajaran di lingkungan Telkom Applied Science School Setelah mengikuti perkuliahan ini mahasiswa dapat: Menjelaskan instruksi-instruksi yang ada pada SAP-3. Membuat program sederhana untuk SAP-3 Dapat menggunakan Simulator 8085 untuk mensimulasikan program SAP-3 yang dibuat. 1 11/25/2015 Komputer SAP-3 (Simple As Possible Versi 3) Meski sederhana, SAP sudah mengandung banyak konsep yang lanjut. SAP-3 merupakan tahap pengembangan dari komputer SAP-1 dan 2. SAP-3 adalah sebuah mikro komputer 8 bit yang kompatibel dengan mikro prosesor 8085. Perangkat instruksi SAP-3 mencakup seluruh instruksi SAP-2 dari bahasan sebelumnya ditambah dengan instruksi-instruksi baru yang akan dibahas. Model Pemrograman: Register-Register SAP-3 (1) A PC SP B PC (Program Counter) Lebar 16-bit (0000H – FFFFH) Nilai PC masuk ke MAR Instruksi dilaksanakan secara berurutan dari alamat 0000 sampai ketemu instruksi HLT. PC (Program Counter) C D E H L F Stack Pointer (SP) Register 16 bit. Register “baru” ini mengendalikan suatu bagian memori yang dikenal sebagai tumpukan (stack). A (Accumulator) Register 8 bit. Digunakan untuk operasi aritmatika dan logika. Untuk menyimpan sementara hasil operasi ALU. Jangkauan dari bilangan tak bertanda yang dapat ditangani adalah 0 sampai 255. Jangkauan dari bilangan komplemen-2 bertanda adalah –128 sampai +127 yang 2 11/25/2015 Model Pemrograman: Register-Register SAP-3 (2) A PC B C SP D E Register 8 bit. Digunakan untuk operasi aritmatika dan logika. Jangkauan dari bilangan tak bertanda yang dapat ditangani adalah 0 sampai 255. Jangkauan dari bilangan komplemen-2 bertanda adalah –128 sampai +127. F H B (Buffer) L yang C (Counter) Register 8 bit. Bisa digunakan untuk menyimpan data dan sebagai register counter. D, E, H dan L Register 8 bit. Untuk pemrosesan data yang lebih efisien. F Register 8 bit. Menyimpan bit-bit Flag S,Z dan lain-lain Instruksi MOV dan MVI (1) Insruksi MOV dan MVI mempunyai prinsip kerja yang sama seperti didalam SAP-2. Perbedaannya hanya terletak pada jumlah register yang lebih besar untuk dilibatkan dalam pemindahan data. Format instruksi : MOV reg1, reg2 Dengan: reg1 = A,B,C,D,E,H atau L reg2 = A,B,C,D,E,H atau L MVI reg, byte Dengan: reg = A,B,C,D,E,H atau L 3 11/25/2015 Instruksi-instruksi Aritmatika Karena lebar akumulator hanya 8 bit, maka isi yang terkandung didalamnya terbatas pada representasi bilangan tak Bertanda dari 0 sampai 255, atau representasi bilangan komplemen –2 bertanda dari –128 sampai +127. Lepas dari jenis representasi bilangan yang dipakai, pemrogram perlu medeteksi adanya overflow (pelimpahan) yaitu hasil jumlahan atau pengurangan yang terletak diluar jangkauan normal dari akumulator. Untuk hal inilah Carry Flag diperkenalkan. Instruksi-instruksi Aritmatika Set Carry, CY=1, instruksi: STC Komplemen Carry, instruksi: CMC Reset Carry, CY=0 dengan instruksi: STC CMC Apabila SUB=0, rangkaian menjumlahkan masukan-masukan A dan B. Jika operasi ini menghasilkan carry akhir, CARRY=1 dan CY=1. Jika tidak ada carry pada akhir operasi, CY=0. Apabila SUB=1, rangkaian membentuk komplemen-2 dari masukan B, yang selanjutnya dijumlahkan dengan A. Dengan adanya gerbang XOR akhir, CARRY=1 yang keluar dari Full Adder terakhir menghasilkan CY=0. Jika tidak ada carry, CY=1. CY = CARRY untuk instruksi ADD CY = CARRY untuk instruksi SUB 4 11/25/2015 Instruksi Aritmatika Dikerjakan oleh ALU Proses aritmatika adalah proses yang didasarkan pada peraturan aritmatika logika. Contoh : ADD (Add Accumulator) ADC (Add Accumulator with Carry) ADI (Add Immediate) ACI (Add Immediate with Carry) SUB (Sub Accumulator) SBB (Sub Accumulator with Borrow) SUI (Sub Immediate) SBI (Sub Immediate with Borrow) Instruksi ADD Instruksi ini menjumlahkan isi dari register yang ditunjuk, dengan isi akumulator. Hasil penjumlahan disimpan dalam accumulator dan keadaan Carry Flag (set atau reset), bergantung pada ada atau tidaknya Carry yang dihasilkan pada akhir operasi. Format instruksi : ADD Reg Dengan: Reg = A,B,C,D,E,H atau L Misal : A=1111 0001 dan E = 0000 1000 ADD E Hasil Penjumlahan CY = 0 5 11/25/2015 Instruksi ADC Instruksi ini menjumlahkan isi dari register yang ditunjuk beserta isi Carry Flag dengan isi accumulator Hasil penjumlahan disimpan dalam accumulator dan keadaan Carry Flag (set atau reset), bergantung pada ada atau tidaknya Carry yang dihasilkan pada akhir operasi. Karena operasi ini melibatkan bendera CY, instruksi ADC memungkinkan penjumlahan bilangan-bilangan diluar batas bilangan tak bertanda dari 0 sampai 255 atau batas bilangan bertanda –128 sampai +127. Format instruksi : ADC Reg Dengan: Reg = A,B,C,D,E,H atau L Misal : A=1000 0011, E=0001 0010, CY=1 ADC E Hasil Penjumlahan CY = 0 Instruksi ADI Instruksi ini menjumlahkan data tertentu dengan isi akumulator. Hasil penjumlahan disimpan dalam accumulator dan keadaan Carry Flag (set atau reset), bergantung pada ada atau tidaknya Carry yang dihasilkan pada akhir operasi. Format instruksi : ADI byte Misal : A=1111 0001 dan byte = 0000 1000 ADI 08H Hasil Penjumlahan CY = 0 6 11/25/2015 Instruksi ACI Instruksi ini menjumlahkan data tertentu beserta isi Carry Flag dengan isi accumulator Hasil penjumlahan disimpan dalam accumulator dan keadaan Carry Flag (set atau reset), bergantung pada ada atau tidaknya Carry yang dihasilkan pada akhir operasi. Karena operasi ini melibatkan bendera CY, instruksi ACI memungkinkan penjumlahan bilangan-bilangan diluar batas bilangan tak bertanda dari 0 sampai 255 atau batas bilangan bertanda –128 sampai +127. Format instruksi : ACI Byte Misal : A=1000 0011, byte=0001 0010, CY=1 ACI 12H Hasil Penjumlahan CY = 0 Contoh 1: Dalam representasi bilangan biner tak bertanda, deretan biner 8-bit dapat mewakili bilangan desimal dari 0 sampai 255, sedangkan 16 bit dapat merepresentasikan angka dari 0 sampai 65.535. Tunjukkan suatu program SAP-3 yang menjumlahkan bilangan desimal 700 dan 900, dengan hasil penjumlahannya disimpan dalam register H dan register L. Solusi: 70010 = 02BCH = 0000 0010 1011 11002 90010 = 0384H = 0000 0011 1000 01002 700 0000 0010 1011 11002 900+ 0000 0011 1000 01002+ 1600 0000 0110 0100 00002 = 0640H 7 11/25/2015 Solusi Contoh 1: Program untuk Melaksanakan berikut : Label penjumlahan kedua bilangan tersebut adalah sebagai Mnemonik Komentar MVI A,00H ; kosongkan akumulator MVI B,02H ; Simpan byte atas (UB) dari 700 MVI C,BCH ; Simpan byte bawah (LB) dari 700 MVI D,03H ; Simpan byte atas (UB) dari 900 MVI E,84H ; Simpan byte bawah (LB) dari 900 ADD C ; Jumlahkan LB dari 700 ADD E ; Jumlahkan LB dari 900 MOV L,A ; Simpan penjumlahan parsial (Low) MVI A,00H ; kosongkan akumulator ADC B ; Jumlahkan UB dari 700 dengan carry ADD D ; Jumlahkan UB dari 900 MOV H,A ; Simpan penjumlahan parsial (High) HLT ; Berhenti Simulasi Contoh 1: Source Code contoh1.sap3 Bahasa Mesin contoh1.sap3 Hasil Simulasi contoh1.sap3 8 11/25/2015 Instruksi SUB Instruksi ini akan mengurangkan isi register yang ditunjuk dari isi akumulator. Jika terjadi pinjaman pada akhir oiperasi ini, bendera CY akan dipasang (diset). Jika tidak ada pinjaman, bendera CY akan direset. Dengan kata lain, selama berlangsung operasi pengurangan, bendera CY berfungsi sebagai bendera pinjaman. Format instruksi : SUB Reg Dengan: Reg = A,B,C,D,E,H atau L Misal : A=0000 1111, C=0000 0001 SUB C Di-NOT-kan CY = 0 Cara Manual Hasilnya Positif Cara SAP-3 Instruksi SBB Instruksi ini akan mengurangkan isi register yang ditunjuk + carry dari isi akumulator. Jika terjadi pinjaman pada akhir oiperasi ini, bendera CY akan dipasang (diset). Jika tidak ada pinjaman, bendera CY akan direset. Dengan kata lain, selama berlangsung operasi pengurangan, bendera CY berfungsi sebagai bendera pinjaman. Format instruksi : SBB Reg Dengan: Reg = A,B,C,D,E,H atau L Misal : A=1111 1111, E=0000 0010, CY=1 SBB E 1111 1111 0000 0010 1+ 0000 0011 0000 00111111 1100 Hasilnya Positif 9 11/25/2015 Instruksi SUI Instruksi ini mengurangkan data tertentu dengan isi akumulator. Hasil pengurangan disimpan dalam accumulator dan keadaan Carry Flag (set atau reset), bergantung pada ada atau tidaknya Carry yang dihasilkan pada akhir operasi. Format instruksi : SUI byte Misal : A=1111 0001 dan byte = 0000 1000 SUI 08H 1111 0001 0000 10001110 1001 Hasil Pengurangan CY = 0 Instruksi SBI Instruksi ini akan mengurangkan data tertentu + carry dari isi akumulator. Jika terjadi pinjaman pada akhir oiperasi ini, bendera CY akan dipasang (diset). Jika tidak ada pinjaman, bendera CY akan direset. Dengan kata lain, selama berlangsung operasi pengurangan, bendera CY berfungsi sebagai bendera pinjaman. Format instruksi : SBI Byte Misal : A=1111 1111, byte=0000 0010, CY=1 SBI 02H 1111 1111 0000 0010 1+ 0000 00111111 1100 Hasilnya Positif, CY=0 0000 0011 10 11/25/2015 Contoh 2: Tunjukkan sebuah program 700 – 900 dan menyimpan jawabannya dalam register H dan L. Solusi: 70010 = 02BCH = 0000 0010 1011 11002 90010 = 0384H = 0000 0011 1000 01002 700 0000 0010 1011 1100 0000 0010 1011 1100 900- 0000 0011 1000 0100- 1111 1100 0111 1100+ - 200 1111 1111 0011 1000(FF38H) Solusi Contoh 2: Program untuk Melaksanakan pengurangan kedua bilangan tersebut adalah sebagai berikut : Label Mnemonik Komentar MVI A,BCH ; Simpan byte bawah (LB) dari 900 SUI 84H ; Kurangkan LB 700 dengan 900 MOV L,A ; Simpan pengurangan parsial (Low) MVI A,02H ; Simpan byte atas (UB) dari 900 SBI 03H ; Kurangkan UB 700 dan 900 dengan borrow MOV H,A ; Simpan pengurangan parsial (High) HLT ; Berhenti 11 11/25/2015 Simulasi Contoh 2: Source Code contoh2.sap3 Bahasa Mesin contoh2.sap3 Hasil Simulasi contoh2.sap3 Instruksi Increment dan Decrement Instruksi increment dan decrement sama dengan instruksi yang telah dikenal dalam SAP-2. Instruksi Increment (INR) dan Decrement (DCR) hanya mempengaruhi Sign dan Zero Flag. Format instruksi : INR Reg DCR Reg Dengan: Reg = A,B,C,D,E,H atau L Contoh: A = FFH = 1111 1111, B = 00H = 0000 0000 Mnemonic Keterangan INR A A A + 1; A = 00H = 0000 0000, S =0, Z=1, CY=0 DCR B B B – 1 ; B = FFH = 1111 1111, S =1, Z=0, CY=0 12 11/25/2015 Instruksi Rotate (1) RAL (Rotate All Left) Memutar nilai akumulator ke kiri satu bit LSB digeser 1 bit kekiri, CY masuk ke bit LSB yang telah digeser. MSB masuk ke CY Misal A = 0111 0100, CY=1 Setelah instruksi RAL CY=0, A=1110 1001 RAR (Rotate All Right) Memutar nilai akumulator ke kanan satu bit MSB digeser 1 bit kekanan, CY masuk ke bit MSB yang telah digeser. LSB masuk ke CY. Misal A = 0111 0100, CY=1 Setelah instruksi RAR CY=0, A=1011 1010 Instruksi Rotate (2) RLC (Rotate Left with Carry) Memutar nilai akumulator ke kiri satu bit. CY berisi MSB dari data yang diputar. Dapat digunakan untuk operasi perkalian kelipatan 2. Misal A = 0111 0100, CY=1 Setelah instruksi RLC CY=0, A=1110 1000 RRC (Rotate Right with Carry) Memutar nilai akumulator ke kanan satu bit CY bit LSB dari data yang diputar. Dapat digunakan untuk operasi pembagian kelipatan 2. Misal A = 0111 0100, CY=1 Setelah instruksi RAR CY=0, A=0011 1010 13 11/25/2015 Instruksi Logika Dikerjakan oleh ALU Proses logika adalah proses yang didasarkan pada peraturan aljabar logika Contoh : CMA (complement the accumulator) ANA (and the accumulator) ORA (or the accumulator) XRA (xor the accumulator) ANI (and Immediate) ORI (or immediate) XRI (xor immediate) CMP (Compare the Accumulator) CPI (Compare Immediate) Instruksi Logika: CMP (Compare the Accumulator) Instruksi ini berfungsi untuk membandingkan isi akumulator dengan isi register yang ditentukan. Instruksi ini mempengaruhi Zero Flag. Format instruksi : CMP Reg Dengan: Reg = A,B,C,D,E,H atau L Contoh: Misal nilai akumulator saat ini adalah A=F8H=1111 1000, D=F8H=1111 1000, Z=0 Setelah instruksi CMP D A=F8H=1111 1000, D=F8H=1111 1000, Z=1 14 11/25/2015 Instruksi Logika: CPI (Compare Immediate) Instruksi ini berfungsi untuk membandingkan isi akumulator dengan data 8 bit. Instruksi ini mempengaruhi Zero Flag. Z =1 jika A = data dan Z=0 jika Z<>data Format instruksi : CPI byte Contoh: Misal nilai akumulator saat ini adalah A=F8H=1111 1000, byte=F8H=1111 1000, Z=0 Setelah instruksi CPI F8 A=F8H=1111 1000, Z=1 Instruksi Jump Berfungsi untuk memungkinkan prosesor mengeksekusi instruksi tidak secara berurutan. Nilai PC dapat diubah sesuai dengan kondisi dan instruksi lompat atau pemanggilan. Contoh : JMP (Jump) JM (Jump if Minus) JP (Jump if Positive) JZ (Jump if Zero) JNZ (Jump if Not Zero) JC (Jump if Carry Set) JNC (Jump if No Carry) JPE (Jump if Parity Even) JPO (Jump if Parity Odd) 15 11/25/2015 Instruksi Jump : JP (Jump if Positive) Adalah instruksi lompatan bersyarat. Prosesor akan memeriksa flag sign keluaran dari ALU. Jika Sign 0 (positif) maka lompatan dilakukan. Format instruksi : JP Alamat Instruksi Jump : JC (Jump if Carry) Adalah instruksi lompatan bersyarat. Prosesor akan memeriksa Carry Flag. Jika Carry Flag=1, maka lompatan dilakukan Format instruksi : JC Alamat 16 11/25/2015 Instruksi Jump : JNC (Jump if No Carry) Adalah instruksi lompatan bersyarat. Prosesor akan memeriksa Carry flag. Jika Carry Flag=0 maka lompatan dilakukan. Format instruksi : JNC Alamat Instruksi Jump : JPE (Jump if Parity Even) Adalah instruksi lompatan bersyarat. Prosesor akan memeriksa P Flag. Jika P Flag=1, maka lompatan dilakukan Format instruksi : JPE Alamat 17 11/25/2015 Instruksi Jump : JPO (Jump if Parity Odd) Adalah instruksi lompatan bersyarat. Prosesor akan memeriksa P Flag. Jika P Flag=0, maka lompatan dilakukan Format instruksi : JPO Alamat Instruksi Extended Register Beberapa instruksi SAP-3 menggunakan pasangan register CPU untuk memproses data 16-bit. Dengan kata lain, selama eksekusi instruksi-instruksi tertentu, register-register CPU disusun dalam kaskade (susunan berderet). Pembentukan pasangan register selalu mengikuti ketentuan sebagai berikut: B berpasangan dengan C, D dengan E, dan H dengan L. Semua instruksi tersebut mengandung huruf X di dalamnya, yang merupakan tanda bagi “extended register” (register yang diperluas) yaitu pasangan register. 18 11/25/2015 Instruksi Extended Register: LXI (Load extended immediate) Instruksi LXI dipakai untuk mengisi pasangan register tertentu dengan byte rangkap. Format instruksi : LXI B, dble LXI D, dble LXI H, dble Dengan: B mewakili pasangan BC D mewakili pasangan DE H mewakili pasangan HL. Dble menyatakan byte rangkap (double byte). Instruksi Extended Register: DAD (Double Add ) Instruksi DAD menjumlahkan isi dari pasangan register tertentu dengan isi dari pasangan pasangan register HL. Hasil penjumlahannya disimpan dalam pasangan register HL Format instruksi : DAD B DAD D DAD H Dengan: B mewakili pasangan BC D mewakili pasangan DE H mewakili pasangan HL. 19 11/25/2015 Instruksi Extended Register: INX dan DCX INX berarti penambahan angka satu pada isi pasangan register (inclement the extended register). Dan DCX menyatakan penurunan angka satu dari isi pasangan register (descrement the extended register). Instruksi INX dan DCX tidak mempengaruhi flag. Format instruksi : INX B DCX B INX D DCX D INX H DCX H Dengan: B mewakili pasangan BC D mewakili pasangan DE H mewakili pasangan HL. Instruksi-instruksi Tak Langsung PC berfungsi sebagai penunjuk instruksi (Instruction Pointer) Agar dapat menyimpan dan mengambil data di lokasi memori tertentu secara tidak langsung, digunakan register HL sebagai penunjuk data (data pointer). Pengesetan alamat memori dilakukan secara tak langsung melalui register HL. Pengalamatan ini disebut pengalamatan tak langsung. 20 11/25/2015 Instruksi-instruksi Tak Langsung: Pembacaan Tak Langsung Instruksi ini mengisi register tertentu dengan data yang alamatnya ditunjukkan oleh HL. Setelah eksekusi instruksi tersebut , register itu akan berisi MHL. Setelah eksekusi instruksi tersebut, register itu akan berisi MHL. Format instruksi : MOV reg, M Dengan reg = A,B,C,D,E,H atau L M = MHL Instruksi-instruksi Tak Langsung: Penulisan Tak Langsung Instruksi ini akan mengisi lokasi memori yang alamatnya ditunjuk oleh HL dengan isi dari register tertentu. Setelah eksekusi instruksi tersebut, kita akan mendapatkan MHL = reg Format instruksi : MOV reg, M Dengan reg = A,B,C,D,E,H atau L M = MHL 21 11/25/2015 Instruksi-instruksi Tak Langsung: Instruksi Segera Tak Langsung Kadang-kadang kita ingin menuliskan data segera (immediate data) ke dalam lokasi memori yang dialamatkan oleh penunjuk HL. Format instruksi : MVI M, byte Dengan M = MHL Instruksi-instruksi Tak Langsung: Instruksi-instruksi penunjuk yang lain Kadang-kadang kita ingin menuliskan data segera (immediate data) ke dalam lokasi memori yang dialamatkan oleh penunjuk HL. ADD M ADC M SUB M SBB M INR M DCR M ANA M ORA M XRA M CMP M M = MHL 22 11/25/2015 Contoh 3: Misalkan ada 256 byte data yang tersimpan dalam memori pada alamat dari 2000H sampai 20FFH. Tunjukkan sebuah program yang akan menyalin 256 byte data ini untuk ditempatkan pada alamat 2100H sampai 21FFH! Solusi Contoh 3: LXI H, 1FFFH ; Inisialisasi penunjuk LOOP: INX H ; Naikkan isi penunjuk MOV B,M ; Baca byte MOV A,H ; Isikan 20H ke dalam akumulator ADI 01H ; Tambahkan ofset 01H untuk mendapatkan 20H MOV H,A ; Pasang penunjuk H dengan ofset. MOV M,B ; Tuliskan byte dalam lokasi baru SUI 01H ; Kurangkan offset MOV H,A ; Mengembalikan H pada kedudukan semula MOV A,L ; Siapkan pembandingan CPI FFH ; Periksa apakah sama dengan 255 JNZ LOOP ; Jika belum, ambil byte berikutnya HLT 23 11/25/2015 Simulasi Contoh 3: Bahasa Mesin contoh3.sap3 Hasil Simulasi contoh3.sap3 24