instruksi aritmatik mpf3

PERCOBAAN 3
INSTRUKSI ARITMATIK DAN LOGIK
Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY
E-mail : sumarna@uny.ac.id

Tujuan dari percobaan ini adalah untuk membiasakan diri dengan berbagai
instruksi aritmatik dan logik serta menjelaskan tentang status flag. Instruksi aritmatik 8
bit dan operasi logik dalam CPU-Z80 dilaksanakan pada register akumulator A.
Register-register A, B, C, D, E, H, dan L dapat digunakan sebagai operand (besaran
hitungan) bersama-sama dengan register A. Setelah suatu operasi aritmatik atau logik
selesai dilaksanakan, hasilnya akan disimpan pada register A dan beberapa status flag
(Carry, Overflow, Change Sign, Zero Result, Parity) juga akan terpengaruh. Status flag
disimpan dalam flip-flop yang membentuk register Flag.
Carry flag berada dalam keadaan set (1) bila dalam operasi penjumlahan tanpa
tanda (+ atau -) hasil yang didapat lebih besar dari bilangan 8 bit. Flag ini juga berada
dalam keadaan set bila dalam operasi pengurangan terjadi peminjaman (borrow). Carry
flag juga berguna sebagai suatu syarat untuk instruksi JUMP, CALL, dan RETURN.
Overflow/parity flag berfungsi pada operasi aritmatik komplemen 2 yang menggunakan
tanda (+ atau -).

Overflow flag menyatakan bahwa bilangan komplemen 2 yang


bertanda pada akumulator telah melebihi kapasitas maksimumnya (+127) atau kurang
dari kapasitas minimumnya (-128). Ketika operasi aritmatik dilaksanakan, bilangan pada
register A dapat dianggap sebagai data yang tidak bertanda (0 s/d 255) atau data yang
bertanda (-128 s/d +127). Untuk operasi logik flag overflow/parity bernilai 1 bila hasil
parity 8 bit dalam akumulator adalah genap. Overflow/parity flag juga sangat berguna
dalam memeriksa transmisi data. Zero flag berkaitan dengan register A ketika bernilai
nol (zero) setelah selesai suatu operasi aritmatik atau logik. Zero flag digunakan sebagai
syarat dalam instuksi percabangan dan berguna dalam program ‘loop’. Sedangkan Sign
flag terkait jika bit yang paling kiri (bit ke 7) dari register A bernilai 1 setelah suatu
operasi logik atau aritmatik selesai dilaksanakan, bilangan pada register A
diinterpretasikan sebagai bilangan negatif atau positif (sign flag di-set menjadi 1 untuk
12

bilangan negatif). Berikut ini dikemukakan beberapa instruksi aritmatik dan logik
beserta penjelasannya !

Mnemonic

Penjelasan


ADD A

Data pada register A ditambahkan pada register A sendiri, artinya data
di-dua kali-kan, atau digeser ke kiri 1 bit

ADC B

Isi register B bersama dengan Carry Flag ditambahkan pada register A

SUB C

Data pada register A dikurangi dengan data pada register C

SBC (HL)

Isi register A dikurangi dengan isi memori yang address-nya ditunjuk
oleh HL, dikurangi lagi dengan Carry Flag

AND D


Operasi AND logik antara register D dan Register A

OR 0FH

Operasi OR logik antara data 0FH dan register A

XOR A

Operai EX-OR logik antara register A dengan dirinya sendiri (karena
register A sama dengan dirinya maka hasilnya pasti nol)

INC H

Menambah isi register H dengan 1 (increment)

INC (IX)

Menambah isi memori pada address yang ditunjuk oleh IX dengan 1


DEC C

Mengurangi isi register C dengan 1 (decrement)

DEC (IY + 3) Hasil penjumlahan dari isi register IY dan 3 dipakai sebagai penunjuk
address pada memori. Kemudian isi memori pada address yang
ditunjuk oleh IY + 3 dikurangi dengan 1

Percobaan 3.1 :
Buatlah program yang dapat dipakai untuk menjumlahkan isi register D dan isi
register E dan hasil penjumlahannya disimpan dalam pasangan register HL. Masukkan
program tersebut ke dalam MPF dan jalankan. Periksa apakah hasil penjumlahan itu
sesuai dengan rancangan ! Tabel berikut dapat digunakan sebagai petunjuk pembuatan.

13

Address

Bahasa
Mesin


Mnemonik

1800

1E 05

LD E,05

1802

7B

LD A,E

1803

16 06

LD D,06


1805

82

ADD A,D

1806

6F

LD L,A

1807
1809
180B

3E 00
CE 00
67


LD A,00H
ADC A,00H
LD H,A

180C

FF

RST 38 H

Keterangan
Masukkan suatu bilangan 8 bit ke dalam
register E
Masukkan data pada register E ke dalam
register A
Masukkan suatu bilangan 8 bit ke dalam
register D
Tambahkan data pada register D ke dalam
register A (Carry flag dapat berubah)

Masukkan data pada register A ke dalam
register L
Masukkan bilangan 0 ke dalam A
Tambahkan 0 bersama Carry ke dalam A
Masukkan data pada register A ke dalam
register H
Kembali ke program monitor

Data di dalam E dan D (05 dan 06) dapat diganti dengan data lain yang berukuran 8 bit.
Kemudian periksalah isi di dalam pasangan register HL setelah pelaksanaan program.

Percobaan 3.2 :
Rancanglah suatu program untuk menjumlahkan data 16 bit di dalam memori
pada address 1A00H hingga 1A01H dengan data 16 bit yang ada di dalam pasangan
register DE

dan hasil penjumlahannya di simpan dalam pasangan register HL.

Masukkan program tersebut ke dalam MPF dan jalankan. Periksa apakah hasil
penjumlahan itu sesuai dengan rancangan ! Tabel berikut dapat digunakan sebagai

petunjuk pembuatan program.

Address

Bahasa
Mesin

Mnemonik

Keterangan

1800

3A 00 1A

LD A,(1A00H)

1803
1805


1E 67
83

LD E,67H
ADD A,E

1806

6F

LD L,A

Masukkan data dari lokasi memori 1A00
ke dalam register A
Masukkan data 67 ke dalam register E
Tambahkan data pada register E ke dalam
register A (Carry flag dapat berubah)
Masukkan data pada register A ke dalam
register L
14


1807

3A 01 1A

LD A,(1A01H)

180A
180C

16 89
8A

LD D,89H
ADC A,D

180D

67

LD H,A

180E

FF

RST 38 H

ADDR 1A00

DATA 98

ADDR 1A01

DATA 23

Masukkan data dari lokasi memori 1A01
ke dalam register A
Masukkan data 89 ke dalam register D
Tambahkan data dalam register D bersama
Carry ke dalam A
Masukkan data pada register A ke dalam
register H
Kembali ke program monitor
Memasukkan data 98 ke dalam lokasi
memori 1A00
Memasukkan data 23 ke dalam lokasi
memori 1A01

Data di dalam E dan D (67 dan 89) serta di dalan lokasi memori 1A00 dan 1A01 (98
dan 23) dapat diganti dengan data lain yang berukuran 8 bit. Kemudian periksalah isi di
dalam pasangan register HL setelah pelaksanaan program.

Percobaan 3.3 :
Rancanglah suatu program untuk menjumlahkan data 32 bit di dalam lokasi
memori yang address-nya 1A00H s/d 1A03H dengan data 32 bit yang terdapat pada
lokasi memori yang address-nya 1A04H s/d 1A07H. Hasil penjumlahannya disimpan di
dalam lokasi memori pada address 1A08H s/d 1A0BH. Ingat bahwa hal yang mutlak
dalam mikrokomputer adalah byte berorde tinggi disimpan di dalam address yang lebih
tinggi. Masukkan program tersebut ke dalam MPF dan jalankan. Periksa apakah hasil
penjumlahan itu sesuai dengan rancangan ! Tabel berikut dapat digunakan sebagai
petunjuk pembuatan program.

Address

Bahasa
Mesin

1800
1802
1806
1807
180A
180D
1810
1812

06 04
DD 21 00 1A
A7
DD 7E 00
DD 8E 04
DD 77 08
DD 23
05

Label

Mnemonik

LD B,04H
LD IX,1A00H
AND A
LOOP LD A, (IX + 00)
ADC A, (IX + 04)
LD (IX + 08),A
INC IX
DEC B
15

1813
1816

C2 07 18
FF

JP NZ, LOOP
RST 38 H

Misalkan dicoba untuk data berikut :
Data

1A00 = 87

1A04 = A2

1A01 = 9A

1A05 = 97

1A02 = 7B

1A06 = A8

1A03 = 48

1A07 = 6B

Hasil 1A08 = 29

48 7B 9A 87
6B A8 97 A2

1A09 = 32

+

1A0A = 24

B4 24 32 29

1A0B = B4

Data di dalam lokasi memori 1A00 s/d 1A03 dan 1A04 s/d 1A07 dapat diganti dengan
data lain yang berukuran 8 bit. Kemudian periksalah isi di dalam lokasi memori 1A08
s/d 1A0B setelah pelaksanaan program.

Percobaan 3.4 :
Susunlah program untuk melaksanakan operasi pengurangan pada bilangan 16
bit (2 byte). Address awal bilangan yang dikurangi adalah 2D70H dan address awal
bilangan pengurangnya adalah 2D72H. Sedangkan address awal tempat penyimpanan
hasil pengurangannya adalah 2D74H. Masukkan program tersebut ke dalam MPF dan
jalankan. Periksa apakah hasil penjumlahan itu sesuai dengan rancangan ! Tabel berikut
dapat digunakan sebagai petunjuk pembuatan program.

Address

Bahasa
Mesin

1800
1802
1807
180A
180D
1810

06 02
DD 21 70 2D
DD 7E 00
DD 9E 02
DD 77 04
DD 23

Label

Mnemonik

LD B,02H
LD IX,2D70H
LOOP LD A, (IX + 00)
SBC A, (IX + 02)
LD (IX + 04),A
INC IX
16

1813
1816

10F3
C9

DJNZ, LOOP
RET

Misalkan dicoba untuk data berikut :
Data

2D70 = CD

2D72 = 12

2D71 = EF

2D73 = 34

CD EF
12 34
-

Hasil 2D74 = BB

BB BB

2D75 = BB
Data di dalam lokasi memori 2D70 s/d 2D71 dan 2D72 s/d 2D73 dapat diganti dengan
data lain yang berukuran 8 bit. Kemudian periksalah isi di dalam lokasi memori 2D74
s/d 2D75 setelah pelaksanaan program.

17