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