Disusun Oleh:
Jurusan Fisika
Tahun 2018
Kata Pengantar
Puji syukur kehadirat Allah SWT yang telah memberikan rahmat dan karunia-Nya
sehingga kami dpat menyelesaikan makalah yang berjudul Intruksi Bahasa Asembly
AT89C51. Kami mengucapkan terimakasih banyak kepada semua pihak yang telah
membantu kami dalam menyelesaikan makalah ini
Makalah ini disusun sebagai tugas mata kuliah Mikrokontroler, yang berisi
mengenai pemahaman berbagai macam intruksi yang digunakan dalam ATMEL AT89C51
dengan bahasa Asembly. Penyusunan ini diharapkan dapat membantu para pembaca baik
siswa, mahasiswa, guru, dosen maupun praktisi.
Kami menyadari bahwa makalah ini jauh dari kata sempurna. Oleh karena itu kami
sangat terbuka dengan kritik dan saran yang membangun. Sehingga dapat digunakan
sebagai bahan perbaikan untuk kedepannya.
Penulis,
Daftar Isi
Halaman Judul................................................................................................................ i
Kata Pengantar............................................................................................................... ii
Daftar Isi........................................................................................................................ iii
BAB I Pendahuluan....................................................................................................... 1
A. Latar Belakang.......................................................................................................... 1
B. Tujuan....................................................................................................................... 1
C. Rumusan Masalah..................................................................................................... 2
D. Manfaat..................................................................................................................... 2
BAB 2 Pembahasan....................................................................................................... 3
4.1 ADD (Add Accumulator) dan ADDC (Add Accumulator With Carry).................. 3
4.2 JUMP (Lompat)........................................................................................................ 3
4.2.1 Pengujian Nilai Bolean.............................................................................. 3
4.2.2 Mengatur Alur Program............................................................................. 4
4.2.3 Instruksi JUMP bersyarat yang fungsinya memantau nilai akumulator A. 5
4.3 Call........................................................................................................................... 6
4.4 Ret (Return).............................................................................................................. 7
4.5 Reti........................................................................................................................... 8
4.6 Acall (Absolute Call)............................................................................................... 9
4.7 Lcall (Long Call)...................................................................................................... 10
4.8 Instruksi Transfer Data yang mengakses Ruang Memori Data Internal.................. 11
4.9 Instruksi Transfer Data yang mengakses Memori Data Eksternal........................... 12
4.10 Tabel-Tengok (Lookup Table)............................................................................... 13
4.11 Instruksi Subb (Substract From Accumulator With Borrow)................................ 14
4.12 Instruksi Da a (Decimal Adjust)............................................................................ 15
4.13 Instruksi Mul Ab.................................................................................................... 16
4.14 Instruksi Div Ab..................................................................................................... 17
4.15 Instruksi Dec dan Inc.............................................................................................. 18
4.16 Instruksi Inc Dptr................................................................................................... 19
4.17 Setb (Set Bit).......................................................................................................... 20
4.18 Clr (Clear Bit)........................................................................................................ 21
4.19 Instruksi Anl (And Logical), Orl (Or Logical), Cpl (Complement Bit) dan Ex-Or
(Exlusive-Or Logical).................................................................................................... 22
4.20 Icjne (Compare and Jump if Not Equal)................................................................ 23
BAB I
PENDAHULUAN
A. Latar Belakang
Kita sering dengar sebagian orang berpendapat belajar assembly tidak perlu.
Alasannya, assembly merupakan pengkodean paling primitif sehingga terlalu banyak
yang harus dipelajari hanya untuk mendapatkan pengertian sedikit. Untuk sekedar
memunculkan pesan "Hello world" di layar saja, perlu beberapa langkah. Dibandingkan
dengan Java, untuk ukuran panjang text yang sama, mungkin Java bisa merampungkan
100 sampai 1000 kali proses komputasi yang dilakukan assembly. Meskipun setelah
berhasil menjadi program, tentu assembly jauh lebih cepat larinya jika penyusunan
logikanya tepat. Selain keprimitifannya, assembly juga sangat tinggi
ketergantungannya dengan arsitektur komputer yang kita gunakan. Jangankan beda
merek, sesama Intel saja tidak ada jaminan kompatibilitas untuk versi yang berbeda.
Intel 486 dan Intel Pentium pasti ada bedanya.
Hal begini menuntut assembly programmer untuk selalu belajar setiap kali ada
perubahan versi. Namun demikian, assembly merupakan fardlu kifayah, terutama bagi
mereka yang tugasnya menjadi technical support. Kenapa? Ketika ada
masalah software, kita dituntut mampu melakukan debugging.
Umumnya debugger menampilkan tahapan proses dalam notasi hexadesimal.
Meskipun mengaku sebagai professor doktor IT, tidak mungkin seseorang mampu
mentafsir logika di balik hexadesimal jika tidak tahu assembly. Kalaupun dia mengaku
demikian, pasti bohong!. Lebih parah lagi jika yang didebug komponen OS atau
program multitasking yang logikanya asinkron. Tidak mungkin ada debuggeryang
mampu melakukannya. Satu-satunya cara adalah membaca trace table dan memory
dump. Pasti yang muncul adalah hexadesimal curah yang tak berformat.
B. Tujuan
1. Memahami penggunaan bahasa Asembly pada AT89C51
2. Mengetahui jenis-jenis instruksi bahasa Asembly yang digunakan pada
AT89C51
C. Rumusan Masalah
1. Apa yang di maksud dengan bahasa Asembly?
2. Sebutkan jenis-jenis instruksi bahasa Asembly yang digunakan pada AT89C51 ?
D. Manfaat
1. Mengetahui bahasa Asembly yang digunakan pada AT89C51
2. Memahami jenis-jenis instruksi bahasa Asembly yang digunakan pada
AT89C51
4.1 ADD (Add Accumulator) dan ADDC (Add Accumulator With Carry)
Instruksi JUMP dapat digunakan atau dipakai untuk pengujian nilai Bolean,
mengatur alur program dan memantau nilai akumulator A.
4.2.1 Pengujian Nilai Bolean
2. JNB (JUMP if Bit Not Set) Instruksi akan lompat ke suatu lokasi memori-
program, apabila bit yang diperiksa hasilnya bernilai 0 . Contoh : P1.1,$
Instruksi ini akan memantau atau memeriksa Port 1 bit 1, apabila P1.1
mempunyai nilai 0 akan mengulang instruksi ini. Tanda $ mempunyai arti,
jika syarat terpenuhi kerjakan lagi instruksi yang bersangkutan.
3. JC (JUMP if Carry Bit Set) Instruksi akan lompat ke suatu memori proram
jika ternyata bit carry bernilai 1 (perlu diingat bahwa bit carry = PSW.7).
4. JNC (JUMP if Carry Bit Not Set) Instruksi akan lompat ke suatu memori-
proram jika ternyata bit carry mempunyai nilai 0 (per diingat bahwa bit
carry= PSW.7).
5. JBC (JUMP if Bit Set and Clear Bit). Instruksi JBC sama dengan JB, hanya
saja jika ternyata bit yang yang diperiksa bernilai 1 , selain MC51 akan
lompat (JUMP) ke instruksi lain yang dikehendaki, MC51 akan menolkan
bit yang baru saja diperiksa tersebut.
4.2.2 Mengatur alur program
1) LJMP (Long Jump) Pemakain instruksi LJMP dapat dipelajari dari po-
tongan program sebagai beikut:
LJMP TugasBaru
....................................
ORG 2000h
TugasBaru : MOV
A, P3.1
ORG adalah instruksi agar program disimpan pada lokasi yang disebut
dibelakang ORG (dalam hal ini lokasi 2000 h). TugasBaru disebut sebagai
label, dengan demikian memori-program lokasi 2000 h diberi nama
TugasBaru, atau juga dapat dikatakan TugasBaru bernilai 2000 h. Label
ditulis minimal satu huruf lebih kiri dari instruksi. Dengan demikian
instruksi LJMP TuigasBaru tersebut sama artinya LJMP 2000h yang oleh
assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).
2) AJMP (Absolute Jump) Instruksi AJMP terdiri atas 2 byte, byte pertama
merupakan kode untuk instruksi AJMP (00001b ) yang digabung dengan
lokasi memori-program bit lokasi 8 sampai dengan bit lokasi 10, byte kedua
dipakai untuk menyatakan lokasi memori program bit lokasi 0 smpai
dengan bit lokasi 7.
Pemakain instruksi LJMP dapat dipelajari dari potongan program
sebagai berikut :
ORG 800h
AJMP DaerahIni
AJMP DaerahLain
ORG 900h
DaerahIni:
.............................................
ORG 1000h
DaerahLain :
.............................................
ORG 0F8h
SJMP DaerahLain
ORG 1000h
Daerah Lain:
Dalam potongan program di atas, memori-program 0F80h tidak terletak
dalam daerah memori program 2 Kilo Byte yang sama dengan 1000h, tapi
instruksi SJMP Daerah Lain tetap bisa dipakai, asalkan jarak antara
instruksi itu dengan label Daerah Lain tidak lebih dari 127 byte.
4.2.3 Instruksi JUMP bersyarat yang fungsinya memantau nilai
Akumulator A
MOV A,# 0
JNZ
BukanNol JZ Nol
...
BukanNol :
...
Nol :
...
Dalam contoh di atas, MOV A, #0 menjadikan akumulator A berisi nol.
Hal ini mengakibatkan instruksi JNZ BukanNol tidak pernah dikerjakan,
sedang saat itu nilai akumulator = 0 selalu dikerjakan , karena syaratnya
selalu dipe- nuhi.
4.3 CALL
4.5 RETI
4.8 Instruksi Transfer Data yang mengak- ses Ruang Memori Data
Internal
Tabel 4.1: Instruksi Transfer Data yang mengakses Ruang Memori Data Internal
Mnemonik Operasi
MOV A,< sumber > A = < sumber >
MOV < tujuan >, A < tujuan >= A
MOV < tujuan >,< sumber > < tujuan >= sumber
MOV DPTR,#data16 DPTR = konstanta 16-bit
PUSH < sumber > INC SP MOV @SP,< sumber >
POP < tujuan > MOV< tujuan >, @SP
EC SP
XCH A,< byte > Tukar data byte
antara ACC dan < byte >
XCHD A,@Ri Tukar data nilai rendah
antara ACC dan @Ri
Keterangan:
(2) Instruksi POP Pertama kali menyalin data dalam lokasi yang ditujunk SP
ke data byte yang terkait, kemudian akan mengurangi SP.
(3) Instruksi XCH A,¡byte¿ digunakan untuk menukar data yang tersimpan
dalam akumulator dengan data di lokasinnya yang ditunjuk oleh < byte
>.
(4) Instruksi XCHD A,@Ri fungsinya sama dengan XCH, namun hanya
melakukan penukaran data nible (4-bit) rendah saja, antara akumulator
dan lokasi memori yang ditunjuk ole Ri.
4.9 Instruksi Transfer Data yang mengak- ses Memori Data External
Pada (Tabel 2.3) ditunjukkan dua instrukssi yang dapat digunakan untuk
membaca tabel-tengok yang tersimpan dalam memori program. Karena
kedua instruksi ini hanya mengakses memori program saja , maka tabel-
tengok hanya bisa dibaca saja, tidak mungkin diremajakan atau update. Jika
akses tabelnya ke memori program eksternal, maka tanda bacanya melalui
kaki P SEN .
Keterangan:
SUBB A, R0 ; A = A R0 C
Bilangan biner 8 bit dalam akumulator A dikalikan dengan biner 8 bit dalam
register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit yang bagian
atas (high byte) disimpan di register B, sedangkan b bit lainnya (low byte)
disimpan di akumulator A.
Bit OV dalam PSW ( Program Status Word ) dipakai untuk menandai nilai
hasil perkalian yang ada dalam register B. Bit OV akan bernilai 0 jika
register B bernilai 00h, jika tidak, maka bit OV selalu bernilai 1 . Contoh:
MOV A, #10
MOV B, # 20
MUL AB
Bilangan biner 8 bit akumulator A dibagi dengan bilangan 8 bit dalam register B.
Hasil pembagian berupa bilangan biner 8 bit ditampung di akumulator A, sedang
sisa pembagian berupa bilangan biner 8 bit ditampung di register B.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai
pembagian yang ada dalam register B. Bit OV akan bernilai j1j, jika register
asalnya bernilai j0j.
4.12 Instruksi DEC dan INC
INC A ; artinya A = A + 1
Agak berbeda dengan instruksi (INC dan DEC), instrukksi INC DPTR
adalah satu-satunya instruksi penaikan ( increment ) yang bekerja pada
data 16 bit, yaitu DPTR. Hal ini berarti menaikkan data sebesar 1. Suatu
limpahan pada bit rendah (low order) dari DPTR atau DPL akan
menaikkan byte tinggi ( high order ), yaitu yang tersimpan di DPH sebesar
1. Tidak flag terpengaruh. Misalnya: DPH = 12h dan DPL = FEh, maka
instruksi ini:
INC DPTR
INC DPTR
INC DPTR
DPTR: (DPH dan DPL) pointer data untuk mengakses data eksternal
memori sebagai pointernya.
Instruksi ini dipakai untuk memberi nilai j1j pada data 1 bit.
Instruksi ini dipakai untuk memberi nilai j0j pada data 1 bit.
Contoh pemakaian instruksi SETB dan CLR, sebagai berikut :
SETB ACC,0 SETB E0H
bernilai j1j, akan tetapi mengingat lokasi dari bit 0 akumulator adalah E0 h,
maka hasil kerja kedua instruksi SETB tersebut adalah sama. Demikian
pula dengan kedua instruksi CLR berikutnya, instruksi-instruksi ini akan
mengakibatkan P1.1 bernilai j0j.
Untuk MC51 hanya bisa melaksanakan tiga jenis operasi logika yang ada, yakni
: ANL, ORL dan CPL.Bit Carry pada PSW diperlukan sebagai akumulator
bit, dengan demikian operasi AND dan operasi OR dilakukan antara bit
yang tersimpan pada bit Carry dengan salah satu dari 256 bit data. Contoh
dari instruksi- instruks, sebagai berikut: CPL akan membalik nilai biner
dalam bit
Instruksi Fungsi Instruksi
ANL C,P1.1 Meng-AND-kan nilai pada bit Carry dengan nilai
Port 1 bit 1(P1.1).
Carry (jangan lupa bit Carry merupakan salah satu bit yang ada dalam
256 bit 0), yakni: bit lokasi E7 h atau PSW 7.
Instruksi CJNE membandingkan dua nilai yang disebut dan MCS akan
lompat ke memori program yang dituju, jika kedua nilai tersebut tidak
sama. Contoh dalam aplikasinya:
MOV A, P1
.................. SJMP
EXIT
Tidaksama:
..................
Kesimpulan