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