OPERASI ARITMATIKA DAN LOGIKA MIKROPROSESOR 8085
BAB VII OPERASI ARITMATIKA DAN LOGIKA MIKROPROSESOR 8085
8.1 Pendahuluan
Operasi-operasi aritmatika dan logika pada mikroprosessor sama seperti operasi pada system digital biasa. Operasi aritmatika yang dapat dikerjakan oleh mikroprosessor 8085 adalah Penjumlahan, Pengurangan dan operasi logika adalah Invers, AND, OR, EX-OR, Instruksi Banding dan instruksi Geser serta Putar. Instruksi Pemrosesan Data (Data Processing)
8.2 Instruksi Aritmatika dan logika mikroprosesor 8085
Instruksi pemrosesan data merupakan instruksi aritmatika dan logika. Seluruh operasi dari instruksi akan mempengaruhi isi dari Bendera (Flag). Instruksi aritmatika terdiri dari :
1. Instruksi Penjumlahan (ADD)
Instruksi Penjumlahan dapat dibedakan lagi atas:
a. Penjumlahan 8-bit Instruksi penjumlahan bilangan biner 8-bit ini merupakan penjumlahan isi
register A dengan isi register yang lain atau suatu bilangan konstanta. Tabel 81 . Instruksi Penjumlahan 8-bit tanpa carry
op – code
Acc = Acc + (Reg)
Contoh : MVI A,85 ;
MVI C,83 ;
Reg.C= 83
Dari hasil operasi di atas maka : Acc = 08 dan bit register flag akan berisi : S=0, H=0,
P=0, Cy=1. Isi register 0 tetap 83.
b. Instruksi Penjumlahan dengan carry Penjumlahan data 8-bit dengan carry adalah penjumlahan Accumulator
dengan data atau isi register dan ditambahkan dengan carry sebelum operasi dilaksanakan. Bentuk formatnya adalah sebagai berikut :
Tabel 8. 2. Instruksi Penjumlahan 8-bit dengan carry. Assembl
; Acc = Acc + Reg.r +
Cy Contoh :
Reg.C = 83
Dari hasil operasi diatas maka : cc=90 dan bit register flag akan berisi: S=1, z=0, H=1, P=1, Cy=0. Isi register C tetap 83.
c. Instruksi Penjumlahan dengan 16-bit Instruksi penjumlahan 16-bit adalah penjumlahan isi pasangan register L dengan pasangan register lain, dimana dalam pemerosesan isi pasangan
register tersebut melalui Accumulator. Instruksi ini adalah DAD (Double ADD).
Tabel 8. 3. Instruksi Penjumlahan 16-bit
Contoh : LXI H,8456
21-56-84
HL 8456
LXI B,8742
01-42-87
BC 8742
DAD B
09 HL HL+BC Cy = 1 HL=OB98 (H)
CF
RST 1
Setelah operasi diatas isi Register HL=OB98 (H) dan BC=8742 (tetap) dan Cy=1 Setelah operasi diatas isi Register HL=OB98 (H) dan BC=8742 (tetap) dan Cy=1
dengan satu dan penambahan isi pasangan register dengan satu, tetapi penambahan satu untuk pasangan register tidak mempengaruhi isi bendera, dengan bentuk formasi sebagai berikut: Tabel 8.4. Instruksi Penambahan Satu
; Reg. r = Reg.r + 1 INX rp
op-code
op-code
; Reg. rp = Reg.rp + 1
2. Instruksi Pengurangan (SUB)
Instruksi Pengurangan dibedakan atas :
a. Instruksi Pengurangan dengan satu (Decremen) Instruksi ini menyebabkan suatu register atau pasangan register berkurang satu.
Tabel 8.5. Instruksi Pengurangan Satu
; Reg. r = Reg.r - 1 DCX rp
op – code
op – code
; Reg. rp = Reg. rp - 1
b. Instruksi Pengurangan data 8 - bit Instruksi pengurangan data 8-bit adalah pengurangan isi accumulator dengan data 8-bit atau isi register dengan bentuk format sebagai berikut :
Tabel 8. 6. Instruksi pengurangan 8-bit tanpa borrow.
SUI d8 op-code
; Acc = Acc - Reg.r
Contoh : MVI A,84
84 (H)
MVI B,27
RST 1 Setelah program diatas dieksekusi maka Acc=5D (H) , B=27 (H) , Flag: S=0, Z=0, H=1,
Cy=0.
c. Instruksi Pengurangan data 8-bit dengan borrow Tabel 8.7. Instruksi pengurangan 8-bit dengan borrow.
; Acc = Acc - Reg.r – Cy
Contoh : MVI A,57
MVI B,27
Cy=1 FF (H)
Setelah program diatas dieksekusi maka Acc=D7 (H) , B=27 (H) , Flag : S=1, Z=0, H=0, Cy=0, P=1.
3. Instruksi Pendesimalan (DAA)
Instruksi ini berfungsi untuk menambahkan 06, 60, 66 terhadap isi accumulator jika hasil penjumlahan lebih besar dari 9. Penambahan 06, 60 atau 66 pada accumulator berdasarkan isi dari Register Bendera.
Contoh: MVI A, 84
Penjumlahan diatas adalah penjumlahan bukan lagi menjadi penjumlahan hexa tapi menjadi penjumnlahan decimal yaitu 84+27= 111. Setelah program diatas dieksekusi maka Acc=11 (H) , B=27 (H) , Flag: S=0, Z=0, H=1,
Cy=1.
4. Instruksi Banding (Compare) Instruksi Banding merupakan instruksi pengurangan isi Accumulator dengan suatu
data 8-bit atau isi suatu register, tetapi isi dari accumulator tetap yang berubah hanya register bendera.
Tabel 8.8. Instruksi Pembandingan
Flag = Acc – d8
CPM r
op-code
Flag = Acc – Reg. r
Contoh : 1. MVI A, 87
Contoh 1 merupakan pembandingan isi Akumulator dengan isi Register B, Proses pembandingan ini dilakukan dengan cara pengurangan isi Acc terhadap isi reg.
B tetapi isi Acc tidak berubah. Setelah program diatas dieksekusi maka Acc = 87 (H),
B=27 (H), Flag P = 1, S = 0, Z = 0, H = = 0, Cy = 0. Program contoh 2 akan menghasilkan Flag : Cy = 0, Z = 1. Program contoh 3 akan menghasilkan Flag : Cy = 1, Z = 0.
5. Instruksi Operasi Logika
Instruksi-instruksi logika ini melaksanakan operasi logika antara Akkumulator dengan suatu data 8-bit atau dengan isi suatu register dimana instruksi ini terdiri dari operasi logika AND (^), logika OR (v), dan Exclusive- OR.
a. Instruksi Logika AND.
Instruksi Logika AND ini akan menghasilkan output seperti table kebenaran gerbang logika AND, jadi instruksi ini padat mewakili fungsi gerbang logika AND biasa.
Tabel 8.9. Instruksi Logika AND Assembly
Fungsi ANI d8
Kode-mesin
Acc = Acc ^ d8 ANA r
E6-d8
op-code
Acc = Acc ^ Reg. r
Contoh : MVI A, 84
b. Instruksi Logika OR.
Tabel 8.10. Instruksi Logika OR
Fungsi ORI d8
F6-d8
op-code
Acc = Acc v Reg. r
c. Instruksi Logika Ex-OR
Tabel 8.11. Instruksi Logika Ex - OR
Assembly
Fungsi XRI d8
Acc = Acc v Reg. r
d. Instruksi Komplement (Complement)
Instruksi Complement ini ada dua buah yaitu CMC dan CMA, dimana CMC berfungsi untuk mengkomplemenkan isi bit carry dari register bendera dan CMA berfungsi untuk mengkomplemenkan isi dari register A.
e. Instruksi Geser (Shift) dan Putar (rotate). Instruksi ini berfungsi untuk menggeser isi dari Register A kearah kanan atau
kiri seperti digambarkan pada gambar 4.1 berikut
Gambar 8.1. Fungsi Instruksi Geser dan Putar Contoh 1 :
Contoh 2 :
STC
STC ; Set Carry Cy = 1 CMC
; Set Carry Cy = 1
MVI A, 82 ;A=82 (H) Cy=1 MVI A, 82 ; A = 82 (H) Cy = 0
: Complement Carry Cy = 0
Contoh 3 : Contoh 4 : STC
;Set Carry Cy = 1 MVI A, 82
; Set Carry
Cy = 1
STC
Cy=1 RAL
; A = 82(H)
Cy = 1
MVI A, 82 ;A=82(H)
;A = C1(H) Cy = 0 RST 1
; A = 05(H)
6. Instruksi Kontrol CPU 8085 mempunyai beberapa instruksi control yang menentukan arah
suatu program, mengambil keputusan dan memodifikasi arah program sesuai dengan hasil pengambilan keputusan. Instruksi ini terdiri dari :
1. Instruksi Lompat (JUMP)
Instruksi ini terbagi atas dua jenis, yaitu mutlak lompat (unconditional jump) dan lompat bersyarat (conditional jump). Adapun bentuk format dari instruksi ini seperti pada table 9.12.
Tabel 8.12. Instruksi Lompat
; Lompat ke alamat a16 JZ a16
C3-ll-hh
CA-ll hh
; Lompat jika ZERO
; Lompat jika tidak ZERO JC a16
JNZ a16
C2-ll-hh
; Lompat jika ada Carry JNC a16
DA-ll-hh
; Lompat jika tidak ada Carry JM a16
D2-ll-hh
FA-ll-hh
; Lompat jika minus
JP a16
F2-ll-hh
; Lompat jika Positif
JPE a16
; Lompat jika Parity Genap JPO a16
EA-ll-hh
E2-ll-hh
; Lompat jika Parity Ganjil
2. Instruksi Cabang dan Kembali (CALL, RET) Instruksi CALL membuat suatu program melaksanakan suatu program subrutin yang alamat awalnya setelah kode operasi dari instruksi CALL tersebut, dan akan kembali lagi ke program utama jika instruksi kembali RET (return) dijumpai. Instruksi ini terdiri dari dua jenis yaitu instruksi bersyarat dan tidak bersyarat. Syarat dari instruksi ini dilihat dari kondisi isi register Bendera. Setelah instruksi ini dikerjakan isi register bendera tidak berubah.
Tabel 8.13. Instruksi Cabang
CALL a16
; CALL Sub Rutin pada alamat a 16 CC a16
CE-ll-hh
; CALL Sub Rutin jika ada Carry CNC a16
DC-ll hh
; CALL Sub Rutin jika tidak ada Carry CZ a16
D4-ll-hh
CC-ll-hh
; CALL jika zero
CNZ a16
C4-ll-hh
; CALL jika tidak zero
CM a16
FC-ll-hh
; CALL jika minus
CP a16
F4-ll-hh
; CALL jika Positif
CPE a16
EC-ll-hh
; CALL jika Parity Genap
CPO a16
E4-ll-hh
; CALL jika Parity Ganjil
Tabel 8.14. Instruksi Kembali
C9 ; Kembali ke Program Utama
RC
D8 ; Kembali jika ada Carry
RNC
D0 ; Kembali jika tidak ada Carry
RZ
C8 ; Kembali jika hasil 0
RNZ
C0 ; Kembali jika hasil tidak 0
RM
F0 ; Kembali jika Akkumulator negatif
RP
FB ; Kembali jika Akkumulator Positif
RPE
E0 ; Kembali jika Acc berparity Genap
RPO
EB ; Kembali jika Acc berparity Ganjil
Keterangan : --------- = saling dipertukarkan
( ) = Isi dari suatu alamat ( ( rp ) ) = Isi alamat dimana alamatnya terdapat pada pasangan register rp d8 = Data 8-bit d16
= Data 16-bit a16
= Alamat 16-bit ll
= Alamat atau Data low byte
hh = Alamat atau Data high byte v
= Logika OR ^
= Logika AND
V = Logika EX-OR