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
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