[BAB 3] Program Sederhana
-
Upload
nur-alifah-apriliany -
Category
Documents
-
view
284 -
download
24
description
Transcript of [BAB 3] Program Sederhana
-
50
Bab 3 Program Sederhana
3.1 PROGRAM TRANSFER DATA
Kelompok intruksi transfer data merupakan instruksi-instruksi yang sering
digunakan pada program dalam mikroprosesor INTEL 8085. Sehingga instruksi-instruksi
transfer data lebih baik dipelajari terlebih dahulu dibandingkan dengan instruksi-instruksi
lainnya.
Instruksi transfer data adalah instruksi-instruksi untuk memindahkan data 8 bit dari
satu register ke register lain, dari register ke memori atau sebaliknya. Program Transfer data
juga dapat dilakukan antar blok memori. Instruksi-instruksi transfer data memiliki sifat
tidak mempengaruhi register flag.
1) Buat program sederhana untuk mengisi register
Register A B C D E H L SP PC
Data 9D 4A 39 SF AD CC 4B 8384 9596
Contoh
3 Program Sederhana
-
51
Bab 3 Program Sederhana
Flowchart :
START
A 9D
B 4A
C 39
D 5F
E AD
H CC
L 4B
SP 8384
[D001:D000] HL
HL 9596
PC HL
HL [D001:D000]
STOP
Setelah mengetikkan perintah-perintah diatas, hasilnya midicom akan mengalami
hang. Hal ini disebabkan oleh PC yang diganti datanya. Oleh karena itu, untuk menyiasatinya
kita ketikkan instruksi selanjutnya pada alamat yang ditujukan PC, dalam hal ini alamatnya
9596. Maka setelah dieksekusi menggunakan perintah Go, dapat dilihat register-register
telah terisi dengan data yang diinginkan. Dengan demikian dapat kita simpulkan bahwa
program yang kita buat berhasil.
2) Buat program sederhana untuk mengisi memory
Memori 932A 9433 9434 AB52 AB78 C352 C493 C778 CB42 DD22 FFFF
Data 44 22 9C AD DF 95 28 A2 F3 72 5C
Analisa :
Seperti yang sudah dipelajari sebelumnya, untuk mengisi
register terdapat 2 cara, yaitu dengan mengisinya langsung
melalui menu R (register), dan membuat programnya dengan
menu A (assambler). Disini kita mengisikan register dengan
program. Instruksi untuk mengisi register adalah MVI
sedangkan untuk mengisi register pair adalah LXI.
Untuk mengisi register PC tidak bisa langsung diisikan
begitu saja, harus melalui perantara yaitu register HL. Untuk itu
data harus diisikan ke register HL baru kemudian dipindahkan
ke register PC. Namun di dalam register HL sudah terdapat
data, oleh karena itu data tersebut diamankan terlebih dahulu ke
suatu alamat memori. Gunakan instruksi SHLD untuk
mengamankan ke memori dan LHLD untuk mengembalikannya
ke register semula.
-
52
Bab 3 Program Sederhana
Flowchart:
START
A 44
[932A] A
A 22
[9433] A
A 9C
[9434] A
A AD
[AB52] A
A DF
[AB78] A
A 95
[C352] A
A 28
[C493] A
A A2
[C778] A
A F3
[CB42] A
A 72
[DD22] A
A 5C
[FFFF] A
STOP
Instruksi:
Mnemonik
MVI A,44 STA C352
STA 932A MVI A,28
MVI A,22 MVI A,A2
STA 9433 STA C778
MVI A,9C MVI A,F3
STA 9434 STA CB42
MVI A,AD MVI A,72
STA AB52 STA DD22
MVI A,DF MVI A,5C
STA AB78 STA FFFF
MVI A,96 RST 1
Analisa :
Tidak ada instruksi untuk langsung mengisikan data ke alamat memori. Semua data
tersebut harus diisikan terlebih dahulu ke register A sebagai akumulator. Barulah data
tersebut dapat dipindahkan ke alamat memori dengan menggunakan perintah STA.
3) Buat program sederhana untuk mentransfer data dari register ke unit memori
Register A B C D E H L
Memori A200 A201 A202 A203 A204 A205 A206
-
53
Bab 3 Program Sederhana
Flowchart :
START
SP FFFF
STACK HL
HL A200
M A
L L+1
M B
L L+1
M C
L L+1
M D
L L+1
M E
L L+1
HL STACK
[DDDD] A
A H
[A205] A
A [DDDD]
END
4) Buat program untuk mentransfer data dari memori ke register
Register A B C D E H L
Data 49 F3 DB AC CB A2 99
Analisa :
Untuk mentransfer data dari memori ke register kita harus
mengunakan register HL sebagai perantara untuk memudahkan
pentransferan data pada alamat yang berurutan.
Sebelumnya terlebih dahulu data yang ada pada HL diamankan
ke stack. Kemudian HL diisi dengan alamat data tujuan. Data pada
register bisa langsung dimasukkan ke alamat memori bersangkutan
melalui M. M merupakan suatu lokasi di memori yang alamatnya
ditunjukkan oleh HL. Setelah itu, L dinaikkan satu, dengan tujuan
agar register HL menunjuk ke alamat selanjutnya yang akan diisi
data.
-
54
Bab 3 Program Sederhana
Flowchart :
START
HL D100
A M
L L+1
B M
L L+1
C M
L L+1
D M
L L+1
E M
[CC00] A
A [D105]
H A
A [D106]
L A
A [CC00]
END
3.2 PROGRAM SELEKSI DATA
Pada mikroprosesor intel 8085 kita bisa membuat sebuah program yang bisa
digunakan untuk menseleksi beberapa data. Proses penyeleksian tersebut menggunakan
instruksi percabangan. Cara menseleksi suatu data adalah dengan menguji atau memeriksa
salah satu bit pada register flag yang sebelumnya terlebih dahulu harus diberikan instruksi
yang akan mempengaruhi isi register flag, instruksi yang digunakkan diantaranya kelompok
instruksi aritmatika dan logika. Contoh instruksi logika diantaranya, ANA M, ANA R, ANI,
ORA M, ORA R, ORI, XRA M, XRA R, XRI. Penggunaan program seleksi data diantaranya
adalah sebagai berikut :
1. Menghitung jumlah data ganjil dan genap
Untuk menentukan atau mendeteksi suatu data genap atau ganjil dapat dilakukan
dengan menguji bit LSB data tersebut. Jika bit pada posisi LSB berlogik 0 ini
menunjukan data genap dan sebaliknya jika data tersebut berlogik 1 ini menunjukan
data ganjil.
Analisa :
Pada prinsipnya soal ini sama seperti pada soal sebelumnya,
yang berbeda hanya tujuannya. Pada soal sebelumnya data dari
register dimasukkan ke memori melalui M dengan perintah MVI
M,A. Pada soal instruksi nya ditukar menjadi MVI A,M karena data
dari memori yang dipindahkan ke register.
-
55
Bab 3 Program Sederhana
2. Mendeteksi nilai data negatif atau positif
Untuk menetukan atau mendeteksi suatu data negatif atau positif dapat dilakukan
dengan menguji bit MSB data tersebut. Jika bit pada posisi MSB berlogik 0 ini
menunjukan data positif dan sebaliknya jika data tersebut berlogik 1 ini menunjukan
data negatif.
3. Mendeteksi nilai data nol
Data bernilai nol dapat dengan mudah dideteksi dengan memeriksa zero flagyang
terdapat pada flag register. Sebelum instruksi untuk memeriksa keasaandari zero flag
tersebut dilakukan, terlebih dahulu harus diberikan instruksiyang akan
mempengaruhi flag register.
1) Membuat program untuk mencari nilai data terkecil dari 16 data biner 8 bit yang ada
pada alamat $A400-A40F. Simpan data di register D.
Flowchart:
Start
HL A40FD ML L-1
A MA D
Cy = 0
D A
L L-1
S = 0
Stop
Y
T
T
Y
Contoh
Analisa :
Pertama-tama, reg HL diisi dengan alamat akhir data yang
akan dicari nilai terkecilnya. Data pada alamat tersebut kemudian
ditempatkan pada reg D. Kemudian reg L dikurangi untuk
menunjuk ke data selanjutnya. Data tersebut kemudian
dibandingkan dengan data pada alamat sebelumnya yang
ditempatkan di reg D.
Apabila ada borrow Cy = 1, berarti data di reg A lebih kecil
daripada data di reg D. Maka dari itu data di reg A harus
dipindahkan ke reg D. Lewati proses ini jika ternyata tidak ada
borrow.
Kemudian reg L dikurangi lagi untuk mengecek data di
alamat selanjutnya. Proses diatas terus berulang hingga alamat
mencapai A400 dan langsung akan berhenti sebelum reg HL
menunjuk ke alamat diatasnya (alamat negatif).
-
56
Bab 3 Program Sederhana
2) Membuat program untuk menghitung banyaknya data bernilai 2A
-
57
Bab 3 Program Sederhana
Flowchart:
Start
HL A40FD 00
A MA A 01
Z = 1
D D+1
S = 0
Stop
Y
T
T
Y
L L-1
4) Membuat program untuk menghitung banyaknya data bernilai negatif data biner 8 bit
yang ada pada alamat $B005-$B014. Simpan hasil perhitungan di register C.
Analisa :
Reg HL diisi dengan alamat akhir data, lalu reg D diisi
dengan 00 sebagai inisialisasi karena akan digunakan untuk
menghitung jumlah data.
Data pada alamat yang ditunjuk HL di AND kan dengan
01 dengan tujuan untuk mencari data ganjil. Data ganjil apabila
di AND kan dengan 01 maka hasilnya bukan 0, berarti zero
flagnya adalah 0. Sebalikanya data genap akan menghasilkan 0
(z = 1) apabila di AND kan dengan 01.
Ketika menemukan bilangan ganjil (z = 0) D ditambah 1.
Namun apabila data adalah bilangan genap maka akan dilewat
dan tidak akan dihitung oleh reg D.
Kemudian reg L dikurangi lagi untuk mengecek data di
alamat selanjutnya. Proses diatas terus berulang hingga alamat
mencapai A400 dan langsung akan berhenti sebelum reg HL
menunjuk ke alamat diatasnya (alamat negatif).
-
58
Bab 3 Program Sederhana
Flowchart:
Start
C 00HL B005
A MA 80
Cy = 1
C C+1
L L+1A LA 15
Z = 0
Stop
Y
T
T
Y
Analisa :
Reg HL diisi dengan alamat awal data, lalu reg C diisi
dengan 00 sebagai inisialisasi karena akan digunakan untuk
menghitung jumlah data.
Data pada alamat yang ditunjuk HL dibandingkan
dengan 80 untuk mencari data negatif/positif. Apabila tidak
ada borrow berarti data adalah negatif dan reg C akan
ditambah 1. Jika ada borrow berarti data adalah positif dan
tidak akan dihitung oleh reg C.
Kemudian reg L ditambah untuk mengecek data di
alamat selanjutnya. Alamat di reg L akan dibandingkan
dengan 15 agar proses diatas terus berulang hingga alamat
mencapai B014 dan langsung akan berhenti sebelum reg HL
menunjuk ke alamat selanjutnya.