PEMOGRAMAN
LANJUTAN
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)
Instruksi pemrosesan data merupakan instruksi aritmatika dan logika.
Seluruh operasi dari instruksi akan mempengaruhi isi dari Bendera (Flag).
Instruksi aritmatika terdiri dari :
Instruksi Penjumlahan (ADD)
Instruksi Penjumlahan dapat dibedakan lagi atas :
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 1. Instruksi Penjumlahan 8-bit tanpa carry
MVI C,83 ; Reg.C= 83 83(H) 1000 0111(2)
ADD C ; Acc = Acc + C 08(H) 1 0000 1000(2)
RST ;
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.
Instruksi Penjumlahan dengan carry
Penjumlahan data 8-bit dengan carry adalah penjumlahan Akkumulator
dengan data atau isi register dan ditambahkan dengan carry sebelum operasi
dilaksanakan. Bentuk formatnya adalah sebagai berikut :
Tabel 2. Instruksi Penjumlahan 8-bit dengan carry.
Assembli Kode-mesin Fungsi
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.
Instruksi penjumlahan 16-bit adalah penjumlahan isi pasangan register L
dengan pasangan register lain, dimana dalam pemerosesan isi pasangan register
tersebut melalui Akkumulator. Instruksi ini adalah DAD (Double ADD).
Tabel 3. Instruksi Penjumlahan 16-bit
Assembli Kode-mesin Fungsi
Setelah operasi diatas isi Register HL=OB99(H)dan BC=2743 (tetap) dan Cy=1
Instruksi Penambahan satu (Increment)
Instruksi penambahan satu ada dua buah, yaitu penambahan isi register
8-bit 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 4. Instruksi Penambahan Satu
Assembli Kode-mesin Fungsi
INR r op-code ; Reg. r = Reg.r + 1
INX rp op-code ; Reg. rp = Reg.rp + 1
Instruksi Pengurangan dibedakan atas :
- Instruksi Pengurangan dengan satu (Decremen)
Instruksi ini menyebabkan suatu register atau pasangan register berkurang satu.
Tabel 5. Instruksi Pengurangan Satu
Assembli Kode-mesin Fungsi
DCR r op – code ; Reg. r = Reg.r - 1
DCX rp op – code ; Reg. rp = Reg. rp - 1
- Instruksi Pengurangan data 8 - bit
Instruksi pengurangan data 8-bit adalah pengurangan isi akkumulator dengan data
8-bit atau isi register dengan bentuk format sebagai berikut :
Tabel 6. Instruksi pengurangan 8-bit tanpa borrow.
Assembli Kode-mesin Fungsi
Setelah program diatas dieksekusi maka Acc=5D(H), B=27(H), Flag: S=0, Z=0,
H=1, Cy=0.
Tabel 7. Instruksi pengurangan 8-bit dengan borrow.
Instruksi ini berfungsi untuk menambahkan 06, 60, 66 terhadap isi akkumulator
jika hasil penjumlahan lebih besar dari 9. Penambahan 06, 60 atau 66 pada
akkumulator berdasarkan isi dari Register Bendera.
Penjumlahan diatas adalah penjumlahan Desimal.
Setelah program diatas dieksekusi maka Acc=11(H), B=27(H), Flag: S=0, Z=0,
H=1, Cy=1.
Instruksi Banding (Compare)
Instruksi Banding merupakan instruksi pengurangan isiAkkumulator
dengan suatu data 8-bit atau isi suatu register, tetapi isi dari akkumulator tetap
yang berubah hanya register bendera.
Tabel 8. Instruksi Pembandingan
Assemli Kode-mesin Fungsi
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.
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.
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 9. Instruksi Logika AND
Assembli Kode-mesin Fungsi
Tabel 10. Instruksi Logika OR
Assembli Kode-mesin Fungsi
ORI d8 F6-d8 ; Acc = Acc v d8
Contoh :
MVI A, 84 84(H) 1000 0100(2)
MVI B, 27 27(H) v 0010 0111(2) v
ORA B A7(H) 1010 0111(2)
RST 1
Instruksi Logika Ex-OR
Tabel 11. Instruksi Logika Ex - OR
Assembli Kode-mesin Fungsi
XRI d8 EE-d8 ; Acc = Acc v d8
XRA r op-code ; Acc = Acc v Reg. r
Contoh :
MVI A, 84 84(H) 1000 0100(2)
MVI B, 27 27(H) v 0010 0111(2) v
XRA B A3(H) 1010 0011(2)
RST 1
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.
Instruksi ini berfungsi untuk menggeser isi dari Register A kea rah kanan
atau kiri seperti digambarkan pada gambar 4.1 berikut :
RLC
RRC
RAL
RAR
gambar 4.1. Fungsi Instruksi Geser dan Putar
Contoh 1 : Contoh 2 :
STC ; Set Carry Cy = 1 STC ; Set Carry Cy = 1
CMC : Complement Carry Cy = 0 MVI A, 82 ;A=82(H) Cy=1
Akkumulator Cy
Akkumulator Cy
Akkumulator Cy
Akkumulator Cy
MVI A, 82 ; A = 82(H) Cy = 0 RRC ; A = 41(H) Cy = 0
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 12.
Tabel 12. Instruksi Lompat
Assembli Kode-Mesin Fungsi
JMP a16 C3-ll-hh ; Lompat ke alamat a 16
JZ a16 CA-ll hh ; Lompat jika ZERO
JNZ a16 C2-ll-hh ; Lompat jika tidak ZERO
JC a16 DA-ll-hh ; Lompat jika ada Carry
JNC a16 D2-ll-hh ; Lompat jika tidak ada Carry
JM a16 FA-ll-hh ; Lompat jika minus
JPE a16 EA-ll-hh ; Lompat jika Parity Genap
JPO a16 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 13. Instruksi Cabang
Assembli Kode-Mesin Fungsi
CALL a16 CE-ll-hh ; CALL Sub Rutin pada alamat a 16
CC a16 DC-ll hh ; CALL Sub Rutin jika ada Carry
CNC a16 D4-ll-hh ; CALL Sub Rutin jika tidak ada Carry
CZ a16 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
Assembli Kode-Mesin Fungsi
RET 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