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)
|
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
|
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
|
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.