Anda di halaman 1dari 16

Tugas Laporan

MK. Praktek Mikroprosesor

Percobaan IV
INSTRUKSI PERCABANGAN DAN PROGRAM LOOP

OLEH:
RISALUDDIN
092514015
S1

JURUSAN PENDIDKAN TEKNIK ELEKTRONIKA


FAKULTAS TEKNIK
UNIVERSITAS NEGERI MAKASSAR
2011

PERCOBAAN IV
INSTRUKSI PERCABANGAN DAN PROGRAM LOOP
A. TUJUAN PERCOBAAN.
1. Untuk membiasakan pemakai dengan aplikasi instruksi-instruksi
cabang bersyarat dan tak bersyarat.
2. Untuk membiasakan pemakai dengan teknik-teknik merancang
program program loop.
3. Melatih menggunakan status flag dalam pengambilan keputusan.
B. TEORI DASAR
A. Penghitung Program (Program Counter):
Penghitung Program/Program Counter (PC) adalah register 16
bit yang penting dalam CPU. Jika tegangan pada CPU kaki RESET
(kaki 26) turun. menjadi 0 dan kemudian naik menjadi 1 (dengan
menekan tombol RS), PC akan menjadi 0000 H. Pelaksanaan program
kemudian akan dimulai dari address 0000 H menurut pulsa clock yang
dihasilkan oleh sistem hardware. Setiap kali CPU selesai mengambil
satu byte untuk tiap-tiap instruksi dari memory, 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 memory dengan
instruksi untuk pelaksanaan, dimulai dari address memory terendah.
B. Instruksi-instrukti Cabang.
Setelah suatu program dilaksanakan sampai address tertentu,
PC dapat diubah ke address yang lain bilamana programmer tidak
menghendaki

program

dilaksanakan

pada

address

berikutnya

(Misalnya, karena tidak adanya memory setelah address tersebut


ataupun karena program tidak disimpan pada daerah tersebut).

Program kemudian meloncat ke address yang lain dan melanjutkan


pelaksanaan program. Pada bahasa assembly berikut ini berarti PC
akan diubah ke 1828 H setelah instruksi tersebut dilaksanakan,
pelaksanaan program selanjutnya dilaksanakan dari address 1828 H.
LD PC,1828H

(instruksi ini tidak berlaku pada bahasa

assembly Z80)
Sebenarnya, dalam bahasa assembly JP (jump) digunakan
untuk menyatakan perubahan dalam urutan pelaksanaan program.
Instruksi berikut ini mempunyai arti yang sama :
LD

PC,1828 H

= JP 1828 H

C. 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 mikrokomputer mampu menanggapi berbagai syarat yang
datangnya dari luar. Hal ini juga merupakan sebuah alat yang mutlak
perlu dalam merancang program loop. Arti dari Instruksi-instruksi di
bawah ini tertulis di sebelah kanannya:
CP

1OH

;Membandingkan accumulator dengan 10 H dan


mengeset flag yang sesuai.

JP

Z,1828H

;Jika zero flag dalam keadaan set, yaitu A = 10 H,


loncat

ke

address

1828

dan

lanjutkan

pelaksanaan program.
JP

C,245AH

;Jika carry flag dalam keadaan set, yaitu A<10 H,


loncat ke 245A H untuk melaksanakan program
lain.

ADD

A,B

;Sebaliknya,

yaitu

pelaksanaan program.

jika

A>10

H,

lanjutkan

Syarat-syarat untuk instruksi percabangan bersyarat ditulis


setelah JP:
JP

C,XXXX

;Jika ada carry, atau carry flag = 1, loncat ke XXXX.

JP

NC,XXXX

;Jika tidak ada carry, atau carry flag 0, loncat ke


XXXX.

JP

Z,XXXX

;Jika zero flag = 1, atau hasil dari operasi yang


terdahulu dalah nol, loncat ke XXXX.

JP

NZ,XXXX

;Jika zero flag = 0. loncat ke XXXX.

JP

PE,XXXX ;Jika parity flag = I (genap), atau jika teriadi overflow


dalam operasi arithmetik sebelumnya, loncat ke
XXXX.

JP

PO,XXXX

;Jika flag P/V = 0 (parity ganjil atau tidak ada


overflow), loncat ke XXXX.

JP

P,XXXX

;Jika sign flag = 0 (tanda dari hasil operasi yang


terdahulu adalah positif), loncat ke XXXX.

JP

M,XXXX

;Jika flag sign = I (negatif), Ion-cat ke XXXX.

D. Jump Relative:
Untuk mengurangi luas memory yang ditempati program dan
juga untuk menekan biaya sistem mikrokomputer, mikrokomputer Z 80
dapat menggunakan address-address relative untuk menunjukkan
perloncatan suatu, program. Karena sebagian besar perloncatan
dalam suatu program-berada diantara +127 dan -128, suatu bilangan
yang terdiri dari 1 byte dapat digunakan untuk menyatakan perloncatan
ini. Untuk setiap satu operasi loncat, kita dapat menghemat memory I

byte

dibandingkan

bila

kita

menggunakan

instruksi

JP

yang

membutuhkan 2 byte address absolut. Keterangan instruksi-instruksi di


bawah ini dapat dilihat di sebelah kanan:
JR IOH

;Loncat ke depan 10 H (16) lokasi dari program


counter yang saat itu dipakai (address instruksi
berikutnya). Sebenarnya, address instruksi yang akan
dilaksanakan berikutnya

didapat

dengan

menambah IOH pada PC yang sedang dipakai.


JR C,FOH

;Jika carry flag = 1, loncat ke belakang 10H (16) lokasi


Karena bit FOH yang paling kiri adalah 1, hal ini
diketahui sebagai bilangan negatif (komplemen ke-2
nya adalah 1OH).

JR

NC,7FH

;Jika carry flag

0, loncat ke depan 127 lokasi

(nilai maximum)
JR

Z,80H

;Jika zero flag 1, yaitu bila hasil dari operas i yang


terdahulu adalah nol, loncat ke belakang 128 lokasi.
80H (-128) adalah hilangan negatif minimum yang
dapat digunak2n dalam address relative.

Dari contoh-contoh di atas, kita dapat melihat bahwa address


relative yang positif berarti loncat ke depan. Parloncatan yang paling
besar adalah 7FH (+127). Address relative yang negatif berarti loncat
ke belakang, perloncatan yang paling besar adalah SOH (-128).
Perloncatan ini selalu diukur dari address opcode instruksi berikutnya.
Jump relative 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
suatu jump relative.
E. Program Loop:
Salah satu keunggulan komputer yang paling penting adalah
bahwa dia 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 di bawah 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 saia, memory dapat juga
dipakai -sebagai penghitung loop.
2. Penghitung loop dikurang dengan I setiap kali satu putaran loop
selesai dilakukan. Setiap selesai satu Putaran, nilai penghitung
loop harus diperiksa. Jika penghitung tidak sama dengan nol, loop
diulangi sampai penghitung loop sama dengan nol.
Program berikut ini dapat digunakan untuk menjumlahkan data 8 bit
pada memory address 1900H - 190FH dan menyimpan hasilnya pada
pasangan register DE.
LD

C,1OH

;Pergunakan register C sebagai - penghitung loop. Karena


enam belas data 8 bit akan dijumlahkan bersama, preset
1OH dibuat di C.

XOR A
LD

;Nol-kan accumulator dan carry flag.

HL,1900H ;Gunakan

pasangan

register

HL

sebagai

penunjuk

address. Isi memory yang addressnya ditunjukkan oleh HL


akan ditambahkan ke register A. Address pertama adalah
1900H.
LD

D,A

;Register D digunakan untuk menyimpan


dihasilkan pada

operasi

carry

penambahan.

yang
Nol-kan

register D.
XX

ADD A,(HL) ;Tambahkan isi memory yang addressnya ditunjukkan


oleh HL ke register A. Instruksi ini akan diulangi sebanyak
16 kali. XX dapat diisi sebagai label address instruksi 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

tidak dihasilkan carry, loncat

YY untuk melanjutkan

ke

address

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 = 0),


program loop belum selesai. Loncat ke XX untuk
mengulangi loop.

LD

E,A

;Jika

zero flag1,Semua, data telah ditambahkan

bersama-sama. Isikan A pada E, hasilnya akan disimpan


dalam, pasangan register DE.
END.
Percobaan Percobaan
Ada berbagai metoda dalam merancang suatu proglam loop.
Cobalah untuk merancang program loop yang digambarkan dalam
ilustrasi-ilustrasi berikut ini.
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, instruksi DJNZ dapat dipakai untuk
mengurangi register B dengan 1. Jika hasilnya tidak sama dengan - nol,
loncat ke lokasi yang dLtuniuk dengan mempergunakan metoda jump
relative untuk melanjutkan pelaksanaan program. Cobalah untuk
menganalisa program berikut ini dan memeriksa fungsinya dengan
memasukkannya pada GMS-I dan menjalankannya.

ORG

1800H

L, D

HL,1900H

LD

B,20H

LOOP

LD

(HL),A

INC

HL

DJNZ

LOOP

RST

38H

1. Preset register A pada 0 Lalu jalankan program diatas:


Hasilnya :
Isi memori address 1900H 191FH = 00
Isi memori address 1920H = 00.
2. Preset register A pada 55 H lalu jalankan program diatas:
Hasilnya :
Isi memori address 1900 H 191 FH = 55
Isi memori address 1920 H = 00.
3. Preset register A pada 64H dan gantilah instruksi kedua LD B, 20H
dengan instruksi LD B,0. Jalankan programnya lagi.
Hasilnya :
Isi memori address 1900 H 19F FH = 64

Loop Bersarang
Dalam program-program yang lebih rumit, suatu loop dapat
bersarang atau berada di dalam loop yang lain secara total. Berikut ini
adalah cara mengubah isi setiap kelompok data dalam bentuk bilangan
hexadesimal:

C.

ADDRESS

OBJECT CODE

1900H 190FH
1910H 191FH
1920H 192FH
1930H 193FH
1940H 194FH
1950H 195FH
1960H 196FH
1970H 197FH
1980H 198FH
1990H 199FH
19A0H 19AFH
19B0H 19BFH
19C0H 19CFH
19D0H 19DFH
19E0H 19EFH
19F0H 19FFH

00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F

LANGKAH PERCOBAAN.
1 .Percobaan 1
Percobaan ini merupakan program loop. Loop merupakan suatu
alat yang paling dalam merangcang program. Adapun urutan
langkah kerjanya yaitu sebagai berikut:

1. Mencari object code dari instruksi prpgram loop.


(Address awal 1800 H).
2. Lakukan pengisian program pada GMS 1.
3. Preset register A pada O (nol).
4. Periksa hasilnya dengan menekan PC + GO pada alamat
1900 H 191 F H.
5. Ikuti langkah diatas untuk register A pada 55 H dan 64 H.
6. Cacat hasil pengatan.
7. Analisa dan buat kesimpulan.
2. Percobaan 2
Adapun urutan langkah kerjanya yaitu sebagai berikut:
1. Mencari object code dari instruksi prpgram loop.(Address awal
1800 H).
2. Lakukan pengisian program pada GMS 1.
3. Preset register A pada O (nol).
4. Periksa hasilnya dengan menekan PC + GO pada alamat
1900 H 191 F H.
5. Ikuti langkah diatas untuk register A pada 55 H dan 64 H.
6. Catat hasil pengatan.
7. Analisa dan buat kesimpulan.

D. HASIL PERCOBAAN.
1. Percobaan 1
1. Preset register A pada 0 Lalu jalankan program diatas:
Hasilnya :

Isi memori address 1900 H 191 FH = 00


Isi memori address 1920 H = 00.
2. Preset register A pada 55 H lalu jalankan program diatas:
Hasilnya :
Isi memori address 1900 H 191 FH = 55
Isi memori address 1920 H = 55.
3. Preset register A pada 64H dan gantilah instruksi kedua LD B, 20H
dengan instruksi LD, B,0. Jalankan programnya lagi.
Hasilnya :
Isi memori address 1900 H 19F FH = 64
Isi memori address 1A00H

= 00

2. Percobaan 2
Dalam program-program yang lebih rumit, suatu loop dapat
bersarang atau berada di dalam loop yang lain secara total. Berikut ini

adalah cara mengubah isi setiap kelompok data dalam bentuk bilangan
hexadesimal:
ADDRESS
1900H 190FH
1910H 191FH
1920H 192FH
1930H 193FH
1940H 194FH
1950H 195FH
1960H 196FH
1970H 197FH
1980H 198FH
1990H 199FH
19A0H 19AFH
19B0H 19BFH
19C0H 19CFH
19D0H 19DFH
19E0H 19EFH
19F0H 19FFH

E.

ANALISA DATA.

a. Percobaan 1.
ORG

1800 H

LD

HL,1900 H

LD

B,20 H

LD

(HL),A

INC

HL

DJNZ

Loop

OBJECT CODE
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F

RST

38 H

Perhatikan program diatas


ADDRESS
18 00 H
18 01 H
18 02 H
18 03 H
18 04 H
18 05 H
18 06 H
18 07 H
18 08 H
18 09 H
-

SOURCE STATEMENT
LD, HL,1900 H
LD B,20 H
LD (HL),A
INC HL
DJNZ
RST 38 H

OBJECT CODE
21
00
19
06
20
77
23
10
FC
FF

Pada alamat 1800 dengan objek kode 21 dan sourcestatement


LD HL, 1900H maka isi memory yang addressnya ditunjukkan
oleh HL dan akan ditambahkan ke reg A addressnya adalah
1900H dan pada alamat 1801 objek kodenya 00 serta address
1802 objek kodenya 19

Pada

address

1803

dengan

objek

kode

06

yang

menginstrusikan pengisian register B dengan data 20 yang


digunakan sebagai penghitung loop dan preset 20H yang
dimuat pada alamat 1804H.
-

Pada alamat 1806 dengan objek kode 23 dan source steatment


inc HL artinya manambahkan isi eg HL dengan 1

DJNZ artinya instruksi yang digunakan untuk operasi loncat


bersyarat jika isi register B sama dengan 0 maka program tidak
lagi melaksanakan operasi loncat

Dangan melakukan preset register A pada 0 menyebabkan isi


memory address 1900 H -1920 H = 00 karena pengisian register
A dangan 00.

Dangan malakukan preset registar A pada 55H di peroleh hasil


(isi dari memory address 1900 H -1920 H ) = 55

Dangan

melakukan

preset

register

A dengan

berbagai

kombinasi bilangan maka isi dari memory addess 1900 H -1920


H akan sesuai dangan bilangan itu ini terjadi karna pengaruh
program yang di inputkan.
b. Percobaan 2
ORG

1800 H

LD

HL,19FF H

LD

B,10 H

LD

(HL) ,C

DEC

HL

DJNZ

Loop 1

DEC

JP

NZ, Loop 2

RST

38 H

Perhatikan program di atas

ADDRESS
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
180A
180B
180C
180D
180E
-

H
H
H
H
H
H
H
H
H
H
H
H
H
H
H

SOURCE

OBJECT

STATEMENT
LD HL,19FF H

CODE
21
FF
19
OE
OF
06
10
71
2B
10
FC
C2
05
18
FF

LD B,0F H
LD B,20

LD [HL],C
DEC
HL
DJNZ,LOOP 1
JP NZ, Loop 2
RST 38H

Pada alamat 1800 dengan objek kode 20 dan sourcestatement LD HL,


19FF artinya isi memory yang adderssnya ditunjukkan oleh reg HL dan
akan ditambahkan ke reg A

LD B, 0F pada alamat 1803 artinya isi reg B dengan data 0F sehingga


isi dari address 1804 = 0F

LD B, 10 artinya isi reg B dengan 10

LD HL, (C) artinya isi reg HL dijumlahkan dengan data yang ada pada
reg C

DEC HL, data yang ada pada reg HL dikurangi dengan 1

DJNZ merupakan instruksi operasi loop bersyarat jika hasilnya tidak


sama dengan 0 maka loncar ke alamat 1803 untuk mengurangi loop.

DEC C kurangi isi reg C dengan 1

JPNZ (Jump If Not Zero) merupakan instruksi loop bersyarat

DEC B artinya isi reg B dengan 1

JPNZ merupakan instruksi loop. Jika tidak menghasilkan carry untuk


melaksanakan program.

Dari tabel pengamatan diatas dapat kita lihat bahwa untuk address
19F0 19FF isi memorinya adalah 0F.

Untuk address 1910 19IF, isi memorynya adalah 01.

Untuk address 1990 199F, isi memorynya adalah 09.

Isi memory pada alamat tertentu dipengaruhi oleh program yang


diinputkan sesuai syarat loop bersyarat.

F.

KESIMPULAN.
1. Dalam instruksi percabangan bersyarat fungsi ini menyebabkan
sebuah mikrokomputer mampu menanggapi berbagai syarat
yang

datangnya dari luar dimana

hal ini juga merupakan

sesuatu yang mutlak perlu dalam merancang program loop ,


2. Instruksi percabangan bersyarat melakukan operasi loop bila
beberapa syarat tertentu terpenuhi, syarat syarat ini tergantung
dari data pada register flag.
3. Pada akhir loop instruksi DJNZ dapat dipakai untuk mengurangi
register B dengan 1. Jika hasilnya tidak sama dengan 0, loncat ke
lokasi yang ditunjuk dengan menggunakan metode Jump
Relative untuk melanjutkan pelaksanaan program.
4. Dengan melakukan preset register A dengan berbagai kombinasi
bilangan, maka isi dari memory adderss 1900H-191FH akan
sesuai dengan bilangan itu. Ini terjadi karena pengaruh program
yang diimputkan