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 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 (instruksi ini tidak berlaku pada bahasa

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 H 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

jika

A>10

H,

lanjutkan

pelaksanaan program.

Syarat-syarat untuk instruksi percabangan bersyarat ditulis setelah JP: JP JP C,XXXX NC,XXXX ;Jika ada carry, atau carry flag = 1, loncat ke 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 JP NZ,XXXX ;Jika zero flag = 0. loncat ke XXXX.

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 (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 0, loncat ke depan 127 lokasi

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. pasangan register HL sebagai penunjuk

HL,1900H ;Gunakan

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 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. operasi carry yang Nol-kan

penambahan.

INC HL

;Menambah HL dengan 1. HL yang baru

menunjuk untuk

pada data berikutnya yang ada pada memory ditambahkan pada register A. JR NC,YY ;Jika tidak dihasilkan carry, loncat ke

address

YY untuk melanjutkan INC D YY JR DEC C NZ,XX

pelaksanaan program.

;Jika dihasilkan carry, tambahkan carry ini pada register D. ;Kurangi register C dengan 1. ;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 L, D LD LOOP INC DJNZ RST LD

1800H HL,1900H B,20H (HL),A HL LOOP 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:

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

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

C.

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

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

E.

ANALISA DATA.

a. Percobaan 1. ORG LD LD LD INC DJNZ RST 1800 H HL,1900 H B,20 H (HL),A HL Loop 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 RST 38 H LD (HL),A INC HL DJNZ LD B,20 H SOURCE STATEMENT LD, HL,1900 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 LD LD LD DEC DJNZ DEC JP RST 1800 H HL,19FF H B,10 H (HL) ,C HL Loop 1 C NZ, Loop 2 38 H

Perhatikan program di atas

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

SOURCE STATEMENT LD HL,19FF H

OBJECT CODE 21 FF 19

LD B,0F H

OE OF

LD B,20

06 10

LD [HL],C

71 2B

DEC

HL

10 FC C2 05 18

DJNZ,LOOP 1 JP NZ, Loop 2

RST 38H

FF

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