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
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 :
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).
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. (1)
Program loop dasar harus mencakup hal-hal dibawah ini: 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 LD HL, 1900H
Nol-kan accumulator dan carry flag. 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.
JR
NC,YY
Jika dihasilkan cary, loncat ke alamat YY untuk melanjutkan pelaksanaan program.
yy
INC
D
Jika dihasilkan carry, tambahkan carry ini pada register D.
DEC
C
Kurangi register C dengan 1.
NZ, xx
Jika hasilnya tidak sama dengan nol (zero flag). Program loop
JR
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 C21 untuk instruksi Jump. Cobalah untuk menganalisa program berikut ini dan memeriksa fungsinya masukkan pada uPF-1 dan jalankan. ORG
LOOP
1800H
LD
HL, 1900H
LD
B, 20H
LD
(HL), A
INC
HL
DJNZ RST
LOOP 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
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
Loop kecil
Loop besar
DEC
HL
DJNZ
LOOP1
DEC
C
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
LOOP
1800H
LD
BC, 0180H
LD
HL, 1880H
LD
(HL), AAH
INC
HL
DEC
BC
JR RST
NZ, LOOP 38H
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.
Loop
Exit
ORG
1800H
LD LD LD LD CP JR INC INC JR RST
HL, 1B00H DE, 1A00H A, (HL) (DE), A FFH Z, EXIT HL DE Loop 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 Latihan Soal.
NZ,LOOP
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 ?
Alamat
Bhs mesin
Label
Opcode Operand
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
DEC
B
Kurangi B dgn 1
NZ, Loop1
jika belum = 0 ke loop 1
C
Kurangi C dgn 1
NZ, Loop2
Jika belum 0 ke loop2
38H
Selesai
1819
JP 18..
00
DEC
18.. 18..
JP FF
RST
Keterangan
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 1800H
Bahasa Mesin
LD
HL, 1900H
21 00 19
LD
B, 20H
06 20
LD
(HL), A
77
INC
HL
23
LOOP
10 FC
38H
FF
ORG 2.
LOOP
DJNZ RST 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. - Program
LOOP2 LOOP1 Loop kecil Loop besar
-
LD LD LD LD DEC DJNZ DEC JP RST
HL,19FFH C, OFH B, 10H (HL), C HL LOOP1 C NZ, LOOP2 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:
Alamat
Bahasa
Memory
mesin
Keterangan
Bahasa rakitan
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
Bahasa
Memory
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
180CH
23
INC HL
Menambah isi reg HL dengan 1
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
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
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.
H. FLOW CHART Percobaan 1 START
Input alamat awal
LD HL, 1900H
LD B, 20H
LD (HL), A INC HL
≠0
DJ N, Z
=0 RST 38H
Data tampil di alamat yang ditunjuk HL
END
Percobaan 2 A. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 01 sampai 0F START
Input alamat awal LD HL, 19FFH
LD C, 0FH LD B, 10H
LD (HL), C DEC HL
DJ N, Z
≠0
DEC C
≠0 JP N, Z
RST 38H
Data tampil di alamat yang ditujnuk HL
END
B. Membagi data 256 byte menjadi 16 kelompok dan mengisi data perkelompoknya dari 00 sampai 0F START
Input alamat awal LD HL, 19FFH
LD C, 10H; LD D, 0FH LD B, 10H
LD (HL), D DEC HL
DJ N, Z
≠0
DEC C; DEC D
≠0 JP N, Z
RST 38H
Data tampil di alamat yang ditunjuk HL
END
Percobaan 3 START
Input alamat awal LD HL, 1880H LD C, 02H
LD B, C0H
LD (HL), AAH INC HL
≠0
DJ N, Z
=0 DEC C
≠0 JP N, Z
=0 RST 38H
Data tampil di alamat yang ditunjuk HL
END
Percobaan 4 START
Inisialisasi register HL Inisialisasi register DE
LD A, (HL)
INC DE LD (DE), A INC HL
Reg(HL)=FFH ?
ya RST 38H
Isi reg HL = isi reg DE
END
tidak