LAPORAN PRAKTIKUM SISTEM MIKROPROSESSOR INSTRUKSI PERCABANGAN DAN LOOP

Teks penuh

(1)

LAPORAN

PRAKTIKUM SISTEM MIKROPROSESSOR

INSTRUKSI PERCABANGAN DAN LOOP

Disusun oleh

Nama : Yudi Irwanto

NIM : 021500456

Prodi : Elektronika Instrumentasi Tanggal Praktikum : 28 April 2017

Asisten : Rokhmat Arifianto

Adib Afham

SEKOLAH TINGGI TEKNOLOGI NUKLIR BADAN TENAGA NUKLIR NASIONAL

YOGYAKARTA 2017

(2)

PERCOBAAN 4.

INSTRUKSI PERCABANGAN DAN LOOP.

A. TUJUAN PRAKTIKUM

1. Untuk membiasakan penerapan instruksi-instruksi cabang bersyarat dan tak bersyarat.

2. Dapat melakukan teknik-teknik perancangan program loop. 3. Latihan menggunakan status flag dalam pengambilan keputusan. B. DASAR TEORI

1. Penghitung Program (Program Counter).

Penghitung Program (PC) adalah register 16 bit yang penting dalam CPU. Jika tegangan pada CPU kaki Reset (pin 26) turun menjadi nol dan kemudian naik menjadi satu (1) dengan menekan tombol RS, PC akan menjadi 0000H. Pelaksanaan program kemudian akan dimulai dari alamat 0000H menurut pulsa clock yang dihasilkan oleh sistem hardware. Setiap kali CPU selesai mengambil satu byte untuk tiap-tiap instruksi dari memori secara otomatis PC akan ditambah dengan 1. Rangkaian kontrol dalam CPU menentukan berapa byte yang tercakup dalam instruksi tersebut setelah CPU mengambil byte pertama instruksi itu. Instruksi hanya akan dilaksanakan bila PC telah ditambah dengan jumlah byte pada instruksi tersebut. Biasanya program diambil dari memori dengan instruksi untuk pelaksanaan, dimulai dari alamat memori terendah.

2. Instruksi-instruksi Cabang

Setelah suatu program dilaksanakan sampai alamat tertentu, PC dapat diubah ke alamat yang lain bilamana pemrogram tidak menghendaki program dilaksanakan pada alamat berikutnya. Misalnya karena tidak adanya memori setelah alamat tersebut ataupun karena program tidak disimpan pada daerah tersebut. Program kemudian meloncat ke alamat yang lain dan melanjutkan pelaksanaan program. Pada bahasa rakitan berikut ini berati PC akan diubah ke 1828H setelah instruksi tersebut dilaksanakan, pelaksanaan program selanjutnya dilaksanakan dari alamat 1828H. LD PC, 1828H (instruksi ini tidak berlaku pada bahasa rakitan Z80). Sebenarnya dalam bahasa rakitan jump (JP) digunakan untuk menyatakan perubahan dalam urutan pelaksanaan program. Instruksi LD PC, 1828H = JP 1828H.

3. Instruksi Percabangan Bersyarat.

Instruksi percabangan bersyarat melakukan operasi loncat (jump) bila beberapa syarat tertentu terpenuhi. Syarat-syarat ini tergantung dari data pada flag register. Fungsi ini menyebabkan sebuah nikroprosesor mampu menanggapi berbagai syarat yang mutlak perlu dalam merancang program loop. Arti dari instruksi-instruksi beikut ini tertulis diselah kanannya :

(3)

CP 10H Membandingkan isi accumulator dengan 10H dan mengeset flag yang sesuai.

JP Z, 1828H Jika zero flag dalam keadaan set, yaitu A = 10H, loncat ke alamat 1828H dan lanjutkan pelaksanaan program.

JP C, 245AH Jika carry flag dalam keadaan set, yaitu A < 10H, loncat ke 245AH untuk melaksanakan program lain.

ADD A,B Sebaliknya, yaitu jika A > 10H, lanjutkan pelaksanaan program.

Syarat-syarat untuk instruksi percabangan bersyarat ditulis setelah JP :

JP C, XXXX Jika ada carry atau carry flag = 1, loncat ke alamat XXXX. JP NC, XXXX Jika tidak ada carry atau carry flag = 0, loncat ke alamat XXXX. JP Z, XXXX Jika zero flag = 1, atau hasil dari operasi terdahulu adalah nol,

loncat ke alamat XXXX.

JP NZ, XXXX Jika zero flag = 0, loncat ke alamat XXXX.

JP PE, XXXX Jika parity flag = 1 (genap), atau jika terjadi overflow dalam operasi aritmatik terdahulu, loncat ke alamat XXXX.

JP PO, XXXX Jika P/V = 0 (parity ganjil, atau tidak ada overflow), loncat ke alamat XXXX.

JP P, XXXX Jika sign flag = 0 (tanda dari hasil operasi yang terdahulu adalah positif), loncat ke alamat XXXX.

JP M, 245AH Jika sign flag = 1 (negatif), loncat ke alamat XXXX.

4. Loncat (Jump) Relatif

Untuk mengurangi luas memori yang ditempati program dan juga untuk menekan biaya sistem mikrokomputer, mikrokomputer Z80 dapat menggunakan alamat-alamat relatif untuk menunjukkan perloncatan suatu program. Karena sebagian besar perloncatan dalam suatu program di antara +127 dan -128, suatu bilangan yang terdiri dari 1 byte dapat digunakan untuk menyatakan perloncatan ini. Untuk setiap satu operasi loncat, kita dapat menghemat memori 1 byte dibandingkan bila kita menggunakan instruksi JP yang membutuhkan 2 byte alamat absolut. Keterangan instruksi-instruksi dibawah ini dapat dilihat di sebelah kanan.

JR 10H : Loncat ke depan 10H (16) lokasi dari pencacah program yang saat itu dipakai (alamat instruksi berikutnya). Sebenarnya alamat instruksi yang akan dilaksanakan berikutnya didapat menambah 10H pada pencacah program (PC) yang sedang dipakai.

JR C,F0H : Jika carry flag = 1, loncat ke belakang 10H (16) lokasi. Karena bit F0H yang paling kiri adalah = 1, hal ini diketahui sebagai bilangan negatif (komplemen ke-2 nya adalah 10H).

(4)

JR NC,7FH : Jika carry flag =0, loncat ke depan 127 lokasi (nilai maksimum).

JR Z,80H : Jika zero flag = 1, yaitu bila hasil dari operasi yang terdahulu adalah nol, loncat ke belakang 128 lokasi. 80H (-128) adalah bilangan negatif minimum yang dapat digunakan dalam alamat relatif.

Dari contoh-contoh di atas, kita dapat melihat bahwa alamat relatif yang positif berarti loncat ke depan. Perloncatan yang paling besar adalah 7FH (+127). Alamat relatif yang negatif berarti loncat ke belakang, perloncatan yang paling besar adalah 80H (-128). Perloncatan ini selalu diukur dari alamat opcode operasi berikutnya. Jump relatif bisa tak bersyarat ataupun bersyarat. Loncat bersyarat tergantung dari status carry flag atau zero flag. Dalam sistem Z80, data pada sign flag atau P/V flag tidak dapat digunakan sebagai syarat dari satu jump relatif.

5. Program Loop

Salah satu keunggulan komputer yang paling penting adalah bahwa komputer tersebut dapat mengulangi langkah-langkah yang diperlukan dalam menyelesaikan suatu tugas sebanyak mungkin sampai tugas yang bersangkutan selesai dilaksanakan. Hal ini didapat dengan mempergunakan program loop. Loop merupakan suatu alat yang penting dalam merancang program.

Program loop dasar harus mencakup hal-hal dibawah ini:

(1) Suatu preset loop counter (penghitung loop) dengan jumlah loop yang harus dilakukan. Biasanya, suatu register dalam CPU dapat dipakai sebagai penghitung loop. Tentu saja memori dapat juga dipakai penghitung loop.

(2) Penghitung loop dikurang dengan 1 setiap kali satu putaran loop selesai dilakukan. Setiap selesai satu putaran, nilai penghitung loop harus diperiksa. Jika penghitung tidak sama nol, loop diulangi sampai penghitung loop sama dengan nol.

Program berikut ini dapat digunakan untuk menjulahkan data 8 bit pada alamat 1900H - 190FH dan menyimpan hasilnya pada pasangan resister DE.

label LD C,10H Pergunakan resister C sebagai penghitung loop. Karena 16

data 8 bit akan dijumlahakan bersama, preset 10H dibuat di C.

XOR A Nol-kan accumulator dan carry flag.

LD HL, 1900H Gunakan pasangan register HL sebagai penunjuk alamat. Isi

memory yang alamatnya ditunjukkan oleh HL akan

ditambahkan ke register A. Alamat pertama adalah 1900H.

LD D, A Register D digunakan untuk menyimpan carry yang dihasilkan

pada operasi penambahan. nol-kan register D.

xx ADD A, (HL) Tambahkan isi memori yang alamatnya ditunjukkan oleh HL

ke register A, Intruksi ini akan diulangi sebanyak 16 kali. xx

dapat diisi sebagai label alamat intruksi ini.

INC HL Menambah HL dengan 1. HL yang baru menunjuk pada data

berikutnya yang ada pada memory untuk ditambahkan pada

register A.

(5)

JR NC,YY Jika dihasilkan cary, loncat ke alamat YY untuk melanjutkan

pelaksanaan program.

INC D Jika dihasilkan carry, tambahkan carry ini pada register D.

yy DEC C Kurangi register C dengan 1.

JR NZ, xx Jika hasilnya tidak sama dengan nol (zero flag). Program loop

belum selesai. Loncat ke xx untuk mengulangi loop.

LD E, A Jika zero flag = 1 semua data telah telah ditambahkan

bersama-sama. Isikan A pada E, hasilnya akan disimpan dalam pasangan register DE

RST 38H Selesai.

C. ALAT DAN BAHAN

1. Trainer Mikroprosessor Z–80 2. Adaptor 12 V

3. Modul Mikroprosessor

D. PERCOBAN-PERCOBAAN

Ada berbagai metoda dalam merancang suatu program loop. cobalah untuk merancang program loop yang digambarkan dalam intruksi-intruksi berikut ini :

1. Program Loop dengan jumlah loop lebih kecil dari 256.

Jika jumlah loop lebih kecil dari 256, register B dianggap sebagai penghitung loop. Pada akhir loop, intruksi DJNZ dapat dipakai untuk mengurangi register B dengan 1. Jika hasilnya tidak sama dengan nol, loncat ke lokasi yang ditunjuk dengan mempergunakan metode JUMP RELATIF untuk melanjutkan pelaksanaan program. Gunakan tabel C4 atau tabel C-21 untuk instruksi Jump. Cobalah untuk menganalisa program berikut ini dan memeriksa fungsinya masukkan pada uPF-1 dan jalankan.

ORG 1800H LD HL, 1900H LD B, 20H LOOP LD (HL), A INC HL DJNZ LOOP RST 38H 2. Program Bersarang.

Dalam program-program yang lebih rumit, suatu loop dapat bersarang atau berada didalam loop yang lain secara total.program berikut ini dapat digunakan untuk memmbagi data 256 byte yang tersimpan dalam memori menjadi 16 kelompok. Alamat awal memori adalah

(6)

1900H. Ubahlah isi setiap kelompok data dalam bentuk bilngan hexadesimal : 0………(set ke-1), 1……. (set ke-2), 2….. (set ke-3),……; F…..(set ke-16).

LD HL,19FFH

LD C, OFH

LOOP2 LD B, 10H

LOOP1 LD (HL), C

DEC HL

Loop kecil DJNZ LOOP1

DEC C

Loop besar JP NZ, LOOP2

RST 38H

(1) Terjemahkan program diatas ke bahasa mesin, isikan ke uPF-1. Jalankan programnya.

(2) Ubahalah program diatas sedemikian rupa sehingga keenambelas byte kelompok pertama semuanya “F” dan keenambelas byte kelompok terakhir semuanya “0”.

3. Program Loop dengan jumlah loop lebih besar dari 256.

Jika jumlah loop lebih besar dari 256, suatu register 16 bit dapat dipakai sebagai penghitung loop. Tetapi, dalam sistem Z80, penambahan atau pengurangan suatu register 16 bit tidak terpengaruh pada status flag. Jadi, beberapa intruksi pembantu digunakan untuk menentukan apakah penghitung loop sama dengan nol. Program berikut ini dianggap dapat mengeset semua data pada RAM 1880H – 19FFH menjadi AAH.

Cobalah untuk menemukan kesalahan pada program tersebut dan betulkan. Isikan program yang benar dalam uPF-1 dan catat hasilnya.

ORG 1800H LD BC, 0180H LD HL, 1880H LOOP LD (HL), AAH INC HL DEC BC JR NZ, LOOP RST 38H

(7)

4. Program Loop tanpa penghitung mundur (down counter)

Suatu program loop tidak membutuhkan penghitung mundur dapat diganti dengan penghitung ke atas (maju) atau dengan menggunakan metoda perbandingan alamat

atau perbandingan data. Pelajari metoda yang di pakai dalam program loop berikut ini. Isikan program ke uPF-1, kemudian jalankan.

1) Pindahkan rangkaian data pada daerah memori RAM dengan alamat awal 1A00H. Perpindahan akan dihentikan bila data FFH ditemukan.

ORG 1800H LD HL, 1B00H LD DE, 1A00H Loop LD A, (HL) LD (DE), A CP FFH JR Z, EXIT INC HL INC DE JR Loop Exit RST 38H

2) Gantilah semua data yang tersimpan pada daerah memori yang dimulai pada alamat yang ditunjuk oleh HL sampai alamat yang ditunjuk DE dengan nilai komplemen ke-2 nya. Untuk mencoba program, nilai HL harus lebih besar dari pada nilai DE.

ORG 1800H LOOP LD A, (HL) NEG LD (HL), A INC HL AND A SBC HL, DE ADD HL, DE JR NZ,LOOP Latihan Soal.

Dalam program-program yang lebih rumit, suatu loop dapat bersarang atau berada didalam loop yang lain secara total.program berikut ini dapat digunakan untuk membagi data 256 byte yang tersimpan dalam memori menjadi 16 kelompok. Alamat awal memori adalah 1900H. Jalankan program tersebut dan analisa hasilnya, mengapa begitu ? Komentar anda tentang Reg C diisi 00H ?

(8)

Alamat Bhs mesin Label Opcode Operand Keterangan

1810 21 FF 19 LD HL,19FFH Isi HL 1900 sbg alamat

1813 0E 00 LD C, 00H Isi reg C dgn 00 cnt besar

1815 06 10 Loop2 LD B, 10H Isi reg B dg 10 cnt kecil

1817 71 Loop1 LD (HL), C Data di reg C msuk ke HL

1818 28 DEC HL Kurangi HL dgn 1

1819 DEC B Kurangi B dgn 1

JP NZ, Loop1 jika belum = 0 ke loop 1

18.. 00 DEC C Kurangi C dgn 1

18.. JP NZ, Loop2 Jika belum 0 ke loop2

18.. FF RST 38H Selesai

a. Terjemahkan program diatas ke bahasa mesin, isikan ke uPF-1. Jalankan programnya. b. Ubahlah program diatas sedemikian rupa sehingga keenambelas byte kelompok

pertama semuanya “F” dan keenambelas byte kelompok terakhir semuanya “0”. E. HASIL PERCOBAAN

1. Percobaan Loop dengan Jumlah Loop Lebih Kecil dari 256 2. ORG 1800H Bahasa Mesin LD HL, 1900H 21 00 19 LD B, 20H 06 20 LOOP LD (HL), A 77 INC HL 23 DJNZ LOOP 10 FC RST 38H FF Hasil percobaan :

1. Preset register A pada nol kemudian jalankan program diatas, hasilnya : Isi memory alamat 1900H – 190FH : 00

Isi memori alamat 1920H : 00

2. Preset register A pada 55H kemudian jalankan program diatas. Hasilnya : 55 (1900H – 19IFH

3. Preset register A pada 64H dan gantilah intruksi ke dua LD B,20H dengan intruksi

LD B,0. Jalankan program. Hasilnya :1900H – 19FF 64 3. Percobaan Bersarang

A. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dimulai dari 0F sampai 01.

(9)

LD HL,19FFH

LD C, OFH

LOOP2 LD B, 10H

LOOP1 LD (HL), C

DEC HL

Loop kecil DJNZ LOOP1

DEC C

Loop besar JP NZ, LOOP2

RST 38H

- Data

Alamat Data Alamat Data

1910H-191FH 01 1990H-199FH 09 1920H-192FH 02 19A0H-19AFH 0A 1930H-193FH 03 19B0H-19BFH 0B 1940H-194FH 04 19C0H-19CFH 0C 1950H-195FH 05 19D0H-19DFH 0D 1960H-196FH 06 19E0H-19EFH 0E 1970H-197FH 07 19F0H-19FFH 0F 1980H-198FH 08

B. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dimulai dari 0F sampai 00

- Program LD HL,19FFH LD C, 10H LD D, 0FH LOOP2 LD B, 10H LOOP1 LD (HL), D DEC HL

Loop kecil DJNZ LOOP1

DEC C

DEC D

Loop besar JP NZ, LOOP2

RST 38H

- Data

Alamat Data Alamat Data

1910H-191FH 01 1990H-199FH 09 1920H-192FH 02 19A0H-19AFH 0A 1930H-193FH 03 19B0H-19BFH 0B 1940H-194FH 04 19C0H-19CFH 0C 1950H-195FH 05 19D0H-19DFH 0D 1960H-196FH 06 19E0H-19EFH 0E 1970H-197FH 07 19F0H-19FFH 0F 1980H-198FH 08 1900H-1909H 00

4. Program Loop dengan Jumlah Loop Lebih dari 256 Program:

(10)

Alamat Memory

Bahasa

mesin Bahasa rakitan

Keterangan

1800H 27 80 18 LD HL,1880H Isi reg HL dengan alamat 1880H 1803H 0E 02 LD C, 02H Isi reg C dengan data 02H

1805H 06 C0 LD B,C0H Isi reg B dengan data C0H

1807H 36 AA LD (HL), AAH Isi data register HL dengan data AAH

1809H 23 INC HL Menambah isi reg HL dengan 1

180AH 10 FC DJNZ Loop, mengurangi isi Reg B

180CH 0D DEC C Mengurangi isi reg C dengan 1

180DH C2 05 18 JP NZ, Loop2 Melakukan Loop ke alamat 1805

1810 FFH RST 38H Kembali ke program monitor

Hasil percobaan: Alamat Data 1880H AAH 1881H AAH 1882H AAH Dst. . . AAH 19FFH AAH

5. Program Loop tanpa Penghitung Mundur Program:

Alamat Memory

Bahasa

mesin Bahasa rakitan

Keterangan

1800H 21 00 1B LD HL, 1B00H Isi reg HL dengan alamat 1B00H 1803H 11 00 1A LD DE, 1A00H Isi reg DE dengan alamat 1A00H

1806H 7E LD A, (HL) Isi reg A dengan alamat HL

1807H 12 LD (DE), A Isi alamat DE dengan reg A

1808H FE FF CP FFH Membandingkan nilai dengan FFH

180AH 28 2E JR Z, Exit Jump Relative

(11)

180DH 13 INC DE Menambah isi reg DE dengan 1

180EH 20 F6 JR Loop Jump Relative

1810H FF RST 38H Kembali ke program monitor

Hasil program:

Alamat Data Alamat Data

1B00H 01 1A00H 01 1B01H 02 1A01H 02 1B02H 03 1A02H 03 1B03H 04 1A03H 04 1B04H 05 1A04H 05 1B05H 06 1A05H 06 1B06H 07 1A06H 07 1B07H FF 1A07H FF F. PEMBAHASAN

Percobaan pertama adalah program loop. Program ini dijalankan untuk menentukan alamat yang ingin di program. Percobaan pertama bertujuan mendapatkan nilai alamat memori yang sama dari 1900 H-191F H, pada percobaan ini praktikkan hendak menginputkan nilai 00. Hal ini dapat diperoleh dengan mengubah regrister A dan memasang alamat 1920 H. Ketika alamat 1920 H diset dengan FF dan regrister A diset pada nol, maka isi memori pada alamat 1900H-191FH akan bernilai 00. Jadi pengisian memori alamat 1920 H adalah sebagai batas untuk pemasukkan isi memori, dan pengisian memori pada regrister A akan berpengaruh pada isian memori alamat 1900 H-191F H. Program ini dapat berjalan karena adanya loop dengan perintah DJNZ untuk regrister B. Regrister HL berfungsi sebagai alamat memori yang memiliki alamat awalnya adalah 1900 H. Pada regrister B di set dengan nilai 20 H, lalu dilakukan program loop yang isinya yaitu memasukkan nilai regrister A di dalam alamat memori yang berasal dari regrister HL, lalu regrister HL ditambahkan 1 dengan program INC. Kemudian menggunakan program DJNZ untuk mengurangi regrister B 1, dan dilakukan loop kembali. Jadi akan mendapatkan hasil loopnya adalah regrister HL terus bertambah 1 dan setiap penambahan alamat memorinya diisi dengan regrister A dengan pembatas program loop ini adalah regrister B yang dikurangi 1 hingga nol.

Percobaan kedua adalah program bersarang yang terdapat dua percobaan. Yang pertama adalah membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 01 sampai 0F. Program ini dimulai dariLD, HL 19FFH yang artinya isi memory alamat yang ditunjuk HL ditambahkan ke register A dengan alamat pertama 19FFH. LD C, 0FH yang artinya nilai 0F diisikan ke register C atau sebagai inisiasi Loop 1. LD B, 10 H yang artinya penghitung loop 10H kali atau sebagai inisiasi Loop 2. LD (HL), C yang artinya isikan alamat yang ditunjuk HL (dalam program ini alamat dari 19FFH dengan

(12)

loop 10H) dengan register C (dalam program ini 0FH-01H). DEC HL yang artinya menurunkan nilai alamat HL dengan 1. DJNZ yang artinya mengurangi nilai register C dengan 1. DEC C yang artinya menurunkan nilai register C dengan 1. JPNZ yang artinya Jump Relatif if Not Zero untuk loncat ke alamat yang ditunjuk HL jika nilai register C tidak nol. RST yang artinya reset untuk mengakhiri program. Dapat dianalisa bahwa program ini membagi data 256 byte menjadi 15 kelompok (tanpa 1900-1909) karena program ini jika nilai register sudah 0 maka program berhenti. Yang kedua adalah membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 00 sampai 0F.Program ini dimulai dari LD, HL 19FFH yang artinya isi memory alamat yang ditunjuk HL ditambahkan ke register A dengan alamat pertama 19FFH. LD C, 10H yang artinya penghitung loop 10H kali. LD D, 0FH yang artinya nilai 0F diisikan ke register D atau sebagai inisiasi Loop 1. LD B, 10 H yang artinya penghitung loop 10H kali atau sebagai inisiasi Loop 2. LD (HL), D yang artinya isikan alamat yang ditunjuk HL (dalam program ini alamat dari 19FFH dengan loop 10H) dengan register D (dalam program ini 0FH-00H). DEC HL yang artinya menurunkan nilai alamat HL dengan 1. DJNZ yang artinya mengurangi nilai register C dengan 1. DEC C yang artinya menurunkan nilai register C dengan 1.DEC D yang artinya menurunkan nilai register D dengan 1 JPNZ yang artinya Jump Relatif if Not Zero untuk loncat ke alamat yang ditunjuk HL jika nilairegister C tidak nol. RST yang artinya reset untuk mengakhiri program.

Pada percobaan ketiga,program loop yang digunakan lebih besar dari 256, yakni sebesar 180 H atau dalam decimal 384. Ini berarti perintah loop harus dua kali agar dapat menyelesaikan permasalahan. Pada percobaan ini praktikan menggunakan cara loop dalam loop. Dalam hal ini, register 16 bit dipakai sebagai perhitungan loop. Yang menjadi masalah adalah pada penambahan atau pengurangan suatu register 16 bit tidak berpengaruh pada status flag. Jadi, dalam percobaan ketiga ini dibutuhkan intruksi tambahan untuk mengetahui program loop sudah bernilai nol. Pada program percobaan ketiga ini, pertama praktikan melakukan penginisialisasian pada register yang akan digunakan yakni register HL. Kemudian mengisi register C dengan 02H dimaksudkan untuk melakukan Loop besar sebanyak 2 kali karena nilai loop >256. Lalu mengisikan register B dengan C0H dimaksudkan untuk melakukan loop kecil sebanyak C0H kali. Setelah itu barulah dimasukan data AAH ke isi register HL dan ditambah dengan 1. Kemudian pada program DJNZ, artinya melakukan penge-loop-an dengan mengurangi 1 isi register B. penge-loop-an ini akan terus terjadi sampai isi register B bernilai 00. Apabila sudah bernilai 00, nilai register C dikurangi dengan 1, dan dilakukan lagi penge-loop-an sampai alamat 1805 yakni pada LD B, C0H. Pada penge-loop-an JPNZ ini akan terus terjadi sampai isi register C bernilai 00. Apabila sudah bernilai 00, maka proses telah selesai. Dan hasilnya dapat dilihat pada isi alamat 1880H-19FFH bernilai AAH.

Pada percobaan keempat, yakni program loop penghitung mundur, praktikan melakukan penyalinan isi data pada alamat yang dituju. Pada percobaan ini, praktikan akan melakukan penyalinan data pada register HL ke register DE. Pada program awal, praktikan melakukan inisialisasi dengan memasukan nilai alamat pada register HL dan DE. Lalu, dalam proses penyalinan datanya, praktikan menggunakan register A sebagai tempat penyimpanan data

(13)

pada register HL sebelum dipindahkan ke register DE. Kemudian barulah dari isi register A dipindahkan ke alamat pada isi register DE, dengan keadaan isi register tidak berubah nilainya. Untuk menghentikan proses, ditambahkan program CP FFH yang berfungsi untuk membandingkan apakah nilai diregister HL bernilai FFH. Apabila nilai di isi register HL bernilai FFH, maka proses akan selesai, namun apabilai tidak bernilai FFH, maka proses loop akan terus terjadi.

G.KESIMPULAN

1. Percobaan pertama adalah instruksi loop, bertindak sebagai program untuk pengulangan atau looping. Suatu instruksi loop akan membuat program mengulang sesuai data yang kita inginkan dengan batasan-batasan yang diseting pada suatu register.

2. Percobaan kedua adalah program bersarang yang dapat digunakan untuk membagi data 256 byte menjadi beberapa kelompok data yang dapat diatur nilai data perkelompoknya. 3. Percobaan ketiga adalah program loop dengan jumlah loop > 256. Dapat dilakukan

dengan cara melakukan penge-loop-an besar dan penge-loop-an kecil. Penge-loopan besar sebanyak 2X dan penge-loop-an kecil sebanyak C0H kali.

4. Percobaan keempat adalah program loop tanpa penghitung mundur untuk melakukan penyalinan data dari suatu register ke isi register lainnya. Proses akan berhenti apabila isi reg (HL) telah sama dengan nilai FFH.

(14)

H. FLOW CHART Percobaan 1

≠0

=0

START

Input alamat awal

LD B, 20H Data tampil di alamat yang ditunjuk HL END DJ N, Z RST 38H LD (HL), A INC HL LD HL, 1900H

(15)

Percobaan 2

A. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 01 sampai 0F

≠ 0

≠ 0

START

Input alamat awal

LD C, 0FH LD B, 10H Data tampil di alamat yang ditujnuk HL END DJ N, Z RST 38H LD (HL), C DEC HL DEC C JP N, Z LD HL, 19FFH

(16)

B. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 00 sampai 0F

≠ 0

≠ 0

START

Input alamat awal

LD C, 10H; LD D, 0FH LD B, 10H Data tampil di alamat yang ditunjuk HL END DJ N, Z RST 38H LD (HL), D DEC HL DEC C; DEC D JP N, Z LD HL, 19FFH

(17)

Percobaan 3 ≠ 0 =0 ≠ 0 =0 START

Input alamat awal

LD B, C0H Data tampil di alamat yang ditunjuk HL END DJ N, Z RST 38H LD (HL), AAH INC HL DEC C JP N, Z LD HL, 1880H LD C, 02H

(18)

Percobaan 4 tidak ya START Inisialisasi register HL Inisialisasi register DE

Isi reg HL = isi reg DE

END Reg(HL)=FFH ? LD A, (HL) LD (DE), A INC DE INC HL RST 38H

Figur

Memperbarui...

Referensi

Memperbarui...

Related subjects :