Minggu, 04 Desember 2011

MATERI-4 MIKROPROSESSOR


MATERI - 4
INSTRUKSI PERCABANGAN DAN PROGRAM LOOP
A.   Teori Dasar
1.    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.
2.    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
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 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            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.
4.    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
JR        10H              ;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 10H pada PC yang sedang dipakai.
JR        C,F0H          ;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.



5.    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:
a.    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.
b.    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                ;Nol‑kan accumulator dan carry flag.
LD    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      carry yang dihasilkan pada            operasi        penambahan. 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         ke address 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 = 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.
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, 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
                                                 LD                    HL,1900H

Tidak ada komentar:

Posting Komentar