Anda di halaman 1dari 18

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.
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.
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
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
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 ?
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
Bahasa
ORG
2. 1800H 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.
- Program
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:
Alamat Bahasa Keterangan
Bahasa rakitan
Memory mesin
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 Keterangan
Bahasa rakitan
Memory mesin
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 END
ditujnuk HL
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
END
alamat yang
ditunjuk HL
Percobaan 3

START

Input alamat awal

LD HL, 1880H
LD C, 02H

LD B, C0H

LD (HL), AAH
INC HL

DJ N, Z ≠0

=0
DEC C

≠0
JP N, Z

=0

RST 38H

Data tampil di
END
alamat yang
ditunjuk HL
Percobaan 4

START

Inisialisasi register HL
Inisialisasi register DE

LD A, (HL)

INC DE

LD (DE), A
INC HL

Reg(HL)=FFH ? tidak

ya

RST 38H

Isi reg HL = isi reg DE

END

Anda mungkin juga menyukai