LAPORAN PROGRAM DENGAN LOOP - ZULFIKAR TAV

LAPORAN PROGRAM DENGAN LOOP



 laporan PROGRAM DENGAN LOOP
Salah satu kelebihan mikroprosesor/computer adalah dapat melaksanakan suaru tugas yang sama secara berulang-ulang.Untuk melakukan tugas semacam ini, suatu  program harus mempunyai kemampuan untuk kembali ke instruksi sebelumnya(membuat loop).
Mikroproprosesor melaksanakan program loop dengan menggunakan kelompok instruksi percabangan (lompat). Dengan adanya instruksi percabangan maka urutan eksekusi program yang  normal (dari atas ke bawah) akan berubah-berubah. Pada umunya instruksi yang digunakan untuk membuat loop adalah JUMP, CALL, RETURN, dan RESTART.     

Sasaran belajar
Setelah melakukan percobaan pada Bab 3 ini, diharapkan anda mampu:
·         Membedakan penggunaan instruksi percabangan bersyarat dan tidak bersyarat.
·         Mebuat bagan air untuk program-program yang menggunakan loop.
·         Membuat program dengan loop serta mengeksekusikannya.

Peralataan yang digunakan
·         Unit komputer (PC)
·         Simulator 8085

Teori penunjang
Mikroprosesor 8085 menyediakan 29 instruksi percabangan (lompat) yang dapat digunakan oleh pemakai. Ke 29 instruksi tersebut terbagi kedalam kelompok indtrukdi percabangan bersyarat dan tanpa syarat.

A.    Instruksi JMP bersyarat  dan tidak bersyarat
Instruksi percabangan tidak bersyarat, misalnya JMP. Instruksi ini merupakan tiga byte instruksi yakni byte pertama untuk kode operasi instruksi tersebut dan byte kedua dan ketiga untuk alamat. (lihat Gambar 3.1a).

Apabila instruksi JMP  ini dieksekusi, alamat yang terdapat pada byte dua dan tiga akan dipindahkan ke program counter (register PC). Dengan demikian mikroprosesor akan menjemput instruksi selanjutnya dari alamat yang ada di program counter. Instruksi JMP dapat digunkan untuk membuat loop maju (loop1) atau mundur (loop2).
Seperti terlihat pada Gambar 3.1b instruksi ini juga dapat digunakan untuk menjalankan program terusterus-menerus dalam suatu loop kontinyu.
Instruksi-instruksi lompat bersyarat terdiri atas :
·         JZ (jump if zero)
·         JNZ (jump if zero flag not set)
·         JNC (jump if carry flag is 0)
·         JC (jump if carry flag is 1)
·         JPO (jump if the parity of the byte in the accumulator is odd)
·         JP (jump if sign bit is 0,menunjukkan isi akumulator adalah positip)
·         JM (jump if sign bit is 1,untuk menunjukkan bahwa akumulator berisi bilangan negative)
Instruksi-instruksi tersebut  diatas hanya akan dilaksanakanoleh MPU, apabila kondisi yang diminta terpenuhi.
Sebagai contoh pada instruksi JZ (jump if zero),percabangan hanya kan terjadi apabila bit Zero dari Register Flag adalah satu (Z =1). Zero Flag akan berlogikan satu bila hasil suatu operasi aritmatika atau logika sama dengan nol (isi akumulator = 00H). Selain instruksi-instruksi JMP diatas, terdapat pula instruksi PCHL. Instruksi akan mengganti  alamat yang ada deprogram counter dengan isi register HL. Apabila intruksi PCHL dilaksanakan, maka akan terjadi percabangan secra tidak bersyarat.
B.     Instruksi CALL, Return
Instruksi-instruksi CALL alamat digunakan untuk memanggil suatu subprogram atau rutin. Rutin adalah sutu bagian program pendek yang melaksanakan tugas tertentu,misalnya perkalian dua buah bilangan. Jika rutin tersebut akan digunakan berulang kali dalam suatu program, maka dpat ditulis pada memori pada subroutine, dan dapat juga dipanggil setiap kali diperlukan.
Apabila insstruksi CALL ini dieksekusi, maka isiprogram counter akan diganti dengan alamat awal dari subrutin yang sipanggil dalam memori. Urutan eksekusi program oleh mikroprosesor akan seperti yang ditunjukkan oleh Gambar 3.2.
Untuk mengembalikan mikroprosesor ke program utama (setelah menyelesaikan subrutin). Instruksi RETURN sebagai pasangan instruksi CALL.


Kode operasi instruksi CALL
Awal subrutin (Rendah)
Byte alamat awal subrutin (Tinggi)
Memori

Gambar 3.3 Pola instruksi Call
Instruksi CALL adalah instruksi tiga byte (lihat Gambar 3.2), byte pertama berisi kode operasi untuk instruksi. Sedangkan byte kedua dan ketiga berisi alamat awal dari subrutin. Seperti hanya instruksi JMP, instruksi CALL juga dapat bersyarat atau tanpa syarat.
Instruksi-instruksi CALL dengan syarat yaitu:
·         CNZ (call if zero flag is not set)
·         CZ (call if zero)
·         CNC (call if carry flag is 0)
·         CC (call if carry flag is 1)
·         CPO (call if the parity is odd)
·         CPE (call if parity even)
·         CP (call if  positive)
·         CM (call if minus)

Ketika MPU menjumpai instruksi CALL, maka MPU akan menyimpan alamat kembali (alamat instruksi selanjutnya setelah subrutin selesai digunakan) pada suatu bagian memori baca tulis (RAM) tertentu yang disebut Stack. Alamat kembali ini dimuat kedalam register stack pointer dengan menggunakan instruksi LXI SP pada awal program.
Untuk mengembalikan mikroprosesor ke program utama, INTEL 8085 mempunyai instruksi RET bersyarat dan RET tidak bersyarat. Yang termasuk instruksi RET bersyarat adalah :
·         RZ (return if zero)
·         RNC (return if not carry)
·         RC (return if carry)
·         RPO (return if parity odd)
·         RPE (return if parity even)
·         RP (return if plus)
·         RM (return if minus)

Perincian program subroutine (pemakaian instruksi-instruksi CALL dan RET) akan dibahas lebih lanjut pada bab 19.
Pada bab 3 ini tersedia tiga buah latihan yang dapat digunakan oleh saudara, yaitu sebagai berikut :
A.    Latihan membuat program untuk pengambilan data pada suatu blok lokasi memori, dan menyimpan data-data tersebut pada blok lokasi memori yang lain.
B.     Latihan membuat program untuk pengnambilan data dan menambahkan suatu bilangan tertentu kepada masing-masing data kemudian menyimpannya pada lokasi memori yang lain.
C.     Latihan membuat program perkalian 2 bilangan biner 4 bit yang berbeda. Masing-masing bilangan biner tersebut tersimpan pada register B dan register C.



Langkah Percobaan dan Latihan

A.      Program untuk mengambil data dari lokasi memori yang berurutan

A.1    Buatlah bagan alir dan program untuk mengambil 10 data yang terdapat pada alamat A000h sampai dengan A009h, dan simpanlah data tersebut pada lokasi memori yang berurutan (alamat D000h sampai D009h) tuliskan program saudara mulai alamat 8000h

A.2    Bagan alir untuk langkah A.1 adalah sebagai berikut.






A.3    Program untuk langkah A.1 adalah sebagai berikut :


Alamat
Kode operasi
Label
Mnemonic



ORG 8000H
8000
21-00-A0

LXI H, A000H
8003
01-00-D0

LXI B,D000H
8006
16-0A

MVI D, 0AH
8008
7E
LOOP:
MOV A,M
8009
02

STAX B
800A
23

INX H
800B
03

INX B
800C
15

DCR D
800D
C2 08 80

JNZ LOOP
8010
CF

RST 1
A.4      Ujilah program saudara dengan menggunakan data heksadesimal pada Tabel 3.2





Table 3.2
Input Data
Output Data
Alamat
Data
Alamat
Data
A000
24
D000
24
A001
00
D001
00
A002
3B
D002
3B
A003
22
D003
22
A004
10
D004
10
A005
4F
D005
4F
A006
5C
D006
5C
A007
FF
D007
FF
A008
80
D008
80
A009
8D
D009
00








B.        Program untuk  mengambil data dan menjumlahkan data tersebut dengan bilangan tertentu

B.1    Buatlah bagan air dan program untuk mengambil 30 data yang terdapat pada blok memori alamat C000h sampai dengan alamat C01Dh. Tambahkan setiap data dengan 7 dan simpan hasilnya pada alamat D000h sampai dengan alamat D01Dh. Tulis program saudara mulai alamat 9000h.
B.2    Bagan alir untuk langkah B.1 adalah sebagai berikut

START
 
MULAI


 




























B.3    Program untuk langkah B.1 sebagai berikut

Alamat
Kode operasi
Label
Mnemonic
9000


ORG 9000H
9003
21-00-A0

LXI H,C00H
9006
01-00-D0

LXI B,D00H
9008
16-0A

MVI D,1EH
9009
7E
loop
MOV A,M
900A
C6-07

ADI 07H
900C
20

STAX B
900D
23

INX H
9010
03

INX B
9011
15

DCR D
9012



9015



90_



90_



90_



90_



90_



90_



90_



90_



90_
C2-08-80

JNZ LOOP
90_
CF

RST 1


B.4    Ujilah program saudara dengan menggunakan data heksadesimal pada Tabel 3.4

Table 3.4
Input Data
Output Data
Alamat
Data
Alamat
Data
C000
15
D000
1C
C001
4F
D001
56
C002
28
D002
2F
C003
9B
D003
A2
C004
30
D004
37
C005
BC
D005
C3
C006
2D
D006
34
C007
66
D007
6D
C008
1E
D008
25
C009
5D
D009
64
C00A
AF
D00A
B6
C00B
A9
D00B
B0
C00C
21
D00C
28
C00D
C0
D00D
C7
C00E
DC
D00E
E3
C00F
B1
D00F
B8
C010
1B
D010
22
C011
56
D011
5D
C012
00
D012
07
C013
BB
D013
C2
C014
CC
D014
D3
C015
DD
D015
E4
C016
AA
D016
B1
C017
A9
D017
B0
C018
6B
D018
72
C019
7C
D019
83
C01A
BF
D01A
C6
C01B
90
D01B
97
C01C
45
D01C
4C
C01D
2A
D01D
31





C.        Perkalian dua buah bilangan biner 4 bit

C.1    Perkalian dapat digunakan dengan cara penjumlahan berulang, misalnya 3x5 dapat dilaksanakan dengan menjumlahkan bilangan 3 sampai dengan 5 kali
(3x5 = 3+3+3+3+3).

Buatlah bagan air dan program untuk mengalikan 4 bit bilangan biner yang terdapat pada register B dengan 4 bit bilangan biner yang lain yang ada dalam register C. Simpan hasil perkalian antara 2 bilangan tersebut pada register A. Tulis program saudara mulai alamat B000h.

C.2    Bagan alir untuk langkah C.1 sebagai berikut
START
 
MULAI


 







































C.3    Program untuk langkah C.1 adalah sebagai berikut :


Alamat
Kode operasi
Label
Mnemonic
B000h


ORG 8000H
B001
21-00-A0

MVI D, A0H
B003
01-00-D0

MVI E, 0
B006
16-1EH

MVI H,A0H
B008
7E

MVI L,20H
B009
C6-07

MVI C,AH
B00B
20
LOOP
LDAX D
B00C
23

MOV M,A
B00D
03

INDX D
B00E
15

DCR D
B00F
C2-08-80

JNZ LOOP
B010
CF

HLT
B0_



B0_



B0_



B0_



B0_



B0_



B0_



B0_



B0_



B0_







C.4      Ujilah program saudara dengaN menggunakan data heksadesimal pada Tabel 3.6, kemudian catat hasil kali yang diperoleh pada table tersebut.

Table 3.6
Register B
A0
0E
0F
03
0E
02
05
09
Register C
06
03
0E
0A
09
0D
08
0F
Register A
C0
2A
D2
1E
7E
1A
28
87





Analisa
Dari percobaan yang sudah dilakukan dapat diketahui bahwa terjadi pengulangan yang secara terus menerus pada program yang dijalankan. Dalam perulanganharus ada variable control,dimana variable tersebut yang bertugas mengontrol perulangan hingga batas apa atau berapa perulangan bias dilakukan



Kesimpulan
Program ini sesuai dengan teori loop pada umumnya yaitu terjadi pengulangan selama system masih berjalan.





Subscribe to receive free email updates: