OPERASI ARITHMETIK DAN OPERASI LOGIK
A. Tujuan Percobaan
1. Membiasakan para pemakai dengan instruksi arithmetik dan isntruksi operasi logik.
2. Menjelaskan tentang mode addressing memory.
3. Menjelaskan tentang status flag.
4. Latihan menyusun data untuk register-register CPU dan bahan memory.
B. Teori Dasar
1. Mode Addressing Data
Pada instruksi-instruksi bahasa assembly, mode addressing yang dipakai dapat diringkas seperti dibawah ini. Mode addressing yang dapat dilihat pada ‘Z80 CPU technical manual’.
a. Addressing Register
Contoh : pada instruksi ADC A,B. ADC adalah opcode yang menyatakan operasi macam apa yang akan dilaksanakan. Furuf A di sebelah kanan menyatakan bahwa data akan ditambahkan keregister A. Huruf B disebelah kanan huruf A menyatakan bahwa data yang akan ditambahkan ke A diambil dari register B.
b. Addressing Register tidak langsung
Suatu register 16 bit digunakan untuk menyimpan address memory. Contoh : pada instruksi SBC A, (HL), bukan berarti bahwa register A dikurangi HL (perhatikan bahwa HL berada di dalam tanda kurung). Tetapi CPU akan melihat data 16 bit yang terdapat pada HL sebagai address memory, lalu memeriksa data 8 bit yang tersimpan di memory pada address tersebut. Kemudian register A dikurangi dengan data 8 bit yang ditunjuk oleh HL tersebut.IX dan IY disebut register-register indeks. Bila suatu address pada memory ditunjuk oleh IX atau IY, suatu data 8 bit yang kurang dari +127 tetapi lebih dari -128 dapat ditambahkan pada register ini. Data instruksi berikut ini dapat digunakan untuk menambah data yang tersimpan dalam memory yang addressnya ditunjukkan dengan IX+2. hasilnya disimpan dalam register A.
LD A, (IX)
ADD A, (IX+2)
c. Address langsung
Contoh: OR OFH. Disebelah kanan opcode OR, terdapat bilangan OFH. Hal ini berarti bahwa bilangan OFH maupun dan juga programnya disimpan di memory. Cpu mengambil data dengan melihat PC (program counter atau penghitung Program) sebagai address rujukan. Contoh-contoh di bawah ini juga merupakan addressing lansung:
LD b, 8
ADD A, 44H
SUB A, 0A4H
d. Status Flag
Setelah suatu operasi logik atau arithmetik selesai dilaksanakan, hasilnya akan disimpan pada register A dan beberapa status flag (Carry, overflow, change Sign, Yero result, Parity) juga akan terpengaruh. Status flag ini akan disimpan dalam flip-flop di CPU z8. flip-flop ini membentuk suatu register yang disebut flag register. Data pada register ii dapat dipindahkan ke memory seperti juga data pada register-register lain, dengan menggunakan instruksi-instruksi khusus (instruksi PUSH). Beberapa status flag diterangkan di bawwah ini
1) Carry Flag
Carry flag ini akan berada dalamm keadaan set (1) bila dalam operassi penjumlahan yang tidak diberi tanda (+ atau -) hasil yang didapat lebih besar daripada bilangan 8 bit. Flag ini juga berada dalam keadaan set apabila dalam operasi pengurangan, terjadi peminjaman. Carry flag juga digunakan sebagai suatu syarat untuk instruksi-instruksi ‘jump’, ‘call’, atau ‘return’. Flag ini juga berfungsi sebagai penghubung yang penting dalaam operasi-operasi arithmetik yang menggunakan lebih dari 1 byte. Tiga buah data 8 bit dapat dihubungkan sebagaai suatu data 24 bit dengan menggunakan flag carry, empat data 8 bit dapat jugaa dihubungkan sebagai data 32 bit.
2) Verlow / Parity Flag
Pada operasi arithmetik komplemen ke-dua yang menggunakan tanda (dapat positif atau negatif), maka flag ini berfungsi sebagai oferlow flag. Oferlow flag dalam Z80 menyatakan bahwa bilangan komplemen ke-dua yang bertanda pada accumulator telah melebihi kapasitaas maximum (+127) atau kurang dari kapasitas minimum (-128).
Ketika suatu operasi arithmetik dilaksanakan di dlam CPU Z80, bilangan pada regoster A dapat dianggapp sebagaai data yang tidak diberi tanda ( sampai 255) atau data yang bertanda (-123 sampai +127). Dengan demikian, baik carry flag maupun oferlow flag dapat dpengaruhi oleh operasi arithmetik. Programmerlah yang menetukan interpretasi mana yang diinginkan. Berikut ini
Untuk operasi logik pada CPU Z80, flag ini =”1” bila hasil paritiy 8 bit di accumulator adalah genap. Flag ini sangat berguna dalam memeriksa transmisi data. Karena carry dan overflow tidak akan terjadi ddalam operasi-operasi logik, status paritiy dan overflow dapat disimpan dalam flip-flop yang sama. Flip=flop ini disebut P/V flag. Dengan memeriksa flip-flop ini, programmer dapat memeriksa overflow setelah operasi-operasi arithmetik dan memeriksa parity setelah operasi-operasi logik.
3) Zero (Nol) Flag
Jika register A sama dengan nol (zero) setelah operasi logik atau arithmetik, dengan keadaan atau status ini akan dicatat di dalam flip-flop yang disebut zero flag. Zero flag dapat digunakan sebagai syarat untuk instruksi=instruksi percabangan, juga sangat berguna dalam program ‘loop’.
4) Sign (tanda ) Flag
Jika bit yang paling kiri (bit 7) dari register A adalah 1 setelah operasi logik atau arithmetik, bilangan pada register A diinterpretasikan sebagai bilangan negatif. Sign flag ini akan di-set menjadi 1. flag ini akan diabaikan bila programmer telah menunjuk datanya sebagai bilangan-bilangan tanpa tanda.
Flag-flag lain yang diraancang untuk arithmetik BCD tidaklah penting bagi programmer. Format register yang dibentuk oleh flag-flag ini terlihat seperti di bawah ini :
S Z P/V C
Sign Zero Parity atau Carry
Overflow
Pada mikrokomputer, isi flag register biasanya dinyatakann dengan dua digit hexadesimal. Pemakai harus menyatakan data dua digit ini dengan suatu bilangan biner 8 bit. Dengan melihat format flag rgister pemakai dapat memperoleh status flag. Misalnya, jika flag register adalah 3CH, sign flag menytakan positif, nilai tidak nol, paritiy genap, atau terjadi overflow tapi tidak ada carry. Untuk mengetahui flag mana yang akan terpengaruh oleh suatu instruksi, pemakai harus melihat pada appendiks C “Rujukan pemrograman CPU Z80”. Tidak semua instruksi mempengaruhi status flag. (Sumber teori:
(http://kholispeceltransformation.blogspot.Com/2010).
C. Alat Dan Bahan
1. Adaptor 12 V 1 Buah
2. Trainer Mikroprosessor 1 Buah
3. Modul Mikroprosessor 1 Buah
D. Langkah Percobaan
Percobaan berikut ini dapat dipakai untuk menjumlahkan isi register D dan isi register E bersama-sama. Hasilnya akan disimpan pada register HL. Masukkan program ini pada GMS-I dan kemudian jalankan. Adapun langkah kerjanya adalah sebagai berikut :
1. Mencari object code tersebut (address awal 1800 H)
2. Lakukan pengisian pada register DE sesuai data pada tabel. Dengan mereset terlebih dahulu data yang telah dimasukkan. Kemudian tekan reg diikuti dengan menekan tombol DE.
3. Periksa isi register HL dengan menekan tombol reg. HL.
4. Catat hasil percobaan pada tabel 1. kemudian periksa register flag dengan menekan reg kemudian diikuti .PNC untuk register low (FL) dan reg SZH untuk register High (FH) masukkan hasilnya pada tabel 1.
5. Analisa hasil percobaan dan buatlah kesimpulan.
Periksa hasil program dengan menekan reg + DE untuk melihat isi register DE dan reg HL untuk isi register HL. Kemudian untuk melihat register flag tekan reg PNC dan reg SZH. Masukkan hasilnya pada tabel 2, analisa dan buat kesimpulan.
E. Hasil Percobaan
Tabel 8. Program penjumlahan isi register D dan E
Address memory Bahasa mesin Bahsa assembly
1800H 7B LD A,E
1801H 82 ADD A,D
1802H 6F LD L,A
1803H 3E LD A,0
1804H CE ADC A,0
1805H 67 LD H,A
1806H FF RST 38H
Tabel 8 Isi Register HL dan Isi Register Flag ( SZ.H dan .PNC )
Hasil Preset Hasil Pelaksanaan Program
Register Register Flag
D E HL Sign Zero P/V Carry
5AH A6H CE00 0 1 0 1
46H 77H CEBD 1 0 1 0
10 92 CEA2 1 0 0 0
F. ANALISA DATA
Setelah menjalangkan program tekan register DE dan masukkan data dari DE kemudian direset kemudian tekan PC + GO lalu tekan REG HL, maka hasil dari register HL akan muncul pada trainer mikroprosessor, sedangkan untuk mencari sign, zero, P/V, dan carrysetelah didapat hasil dari register HL maka kita menekan REG .PNC untuk mendapat data carry dan P/V serta REG SZH. untuk mendapat data Sign dan Zero.
Untuk Reg D = 5AH, E = A6H
HL = 5AH + A6H = 00H
0 1
0 1
Untuk Reg D = 46H, E = 77H
HL = 46H + 77H = BDH
1 0
1 0
Untuk Reg D = 10H, E = 92H
HL = 10H + 92H = BDH
1 0
0 0
G. Kesimpulan
Pada percobaan pertama data yang ada padaregister DE dijumlahkan dengan data yang ada pada register E dan hasilnya dilihat pada register HL. Untuk melihat status Flog tekan PNC dan tekan reg SZH untuk melihat Sign, Zero, P/V, dan Carrynya.
Pada percobaan dua isi memori 1A01 dan 1A00 dijumlahkan dengan isi register DE dan hasilnya dilihat pada register HL untuk melihat Sign, Zero, P/V, dan Carrynya tekan reg PNC dan Reg SZH.
Untuk memulai mengessekusi sebuah program yang sudah dimasukkan harus menekan Reset, PC, GO.
Tidak ada komentar:
Posting Komentar