Bahasa Assembler
Format Penulisan Bahasa Assembler
Untuk
membuat suatu program diperlukan sebuah format penulisan, hal ini bertujuan
untuk mempermudah dalam pembagian statement pada baris program. Format
penulisan standar bahasa assembly MCS-51 (pada Rigel ReadS51) :
#include
<sfr51.inc>
org 100h
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
;
~ Main Program ~
;
End
Keterangan:
·
#include
<sfr51.inc>
Mengambil
file sfr51.inc pada library program Reads51 yang berguna sebagai referensi
alamat memory untuk port, register, akumulator dan lainnya. Dengan ini dalam
penulisan program, tidak perlu perintah inisialisasi, perintah yang seharusnya
mov 0x80,#ffh dapat ditulis mov p0,#0ffh. Sebenarnya masih banyak lagi file
include yang dapat digunakan hanya saja pada penggunaan standar hanya digunakan
sfr51.inc atau sfr52.inc.
Contoh : sfr51.inc
(AT89x51) dan sfr52.inc (AT89x52).
·
org 100h
Mempunyai
fungsi yang sama dengan perintah a100 pada pemrograman BGC yaitu memulai
program dari alamat memori 100h.
·
mov px, #0ffh
Men-set
suatu port atau berguna untuk mengaktifkan port yang akan digunakan sebagai
input maupun sebagai output. Bila hanya ingin menguji sebuah program pada suatu
simulasi, perintah ini tidak akan banyak berpengaruh pada hasil output program
namun bila ingin diterapkan pada alat nyata, perintah ini wajib disertakan.
·
Main Program
Berisi program utama
·
End
Mengakhiri
baris program
Perintah Dasar Bahasa Assembler
Untuk memberikan masukan pada mikrokontroler MCS-51
diperlukan sebuah perintah untuk mengendalikan masukan dan keluaran yang
diinginkan. Perintah-perintah dasar yang biasa digunakan pada uControler MCS-51
adalah sebagai berikut:
·
clr (clear)
Format
: clr a
(mereset
atau memberi nilai 00h pada akumulator)
clr rx
(mereset atau memberi
nilai 00h pada register x)
Contoh: clr r0
clr py
(mereset atau memberi
nilai 00h pada port y)
Contoh: clr p1
clr <alamat 8 bit>
(mereset atau memberi
nilai 00h pada alamat tertentu)
Contoh:
clr 4ah
·
mov
Format : mov a, px
(menyalin isi data pada
port x ke dalam akumulator)
Contoh: mov a, p3
mov px, #<nilai 8
bit>
(menyalin suatu nilai
8-bit ke port x)
Contoh: mov p0, #0feh
mov px, ry
(menyalin isi data yang
nilainya terdapat pada register y ke dalam port x)
Contoh: mov p3, r5
·
setb (set bit)
Format : setb px.y
(menset atau memberikan
logika 1 pada port x.y)
Contoh: setb p1.0
· Call
Call
terbagi menjadi dua format yaitu acall (absolute call) dan lcall (long call), perbedaannya
hanya pada kemampuan jauh dekatnya pemanggilan subrutin. Seandainya penggunaan
acall hanya mampu memanggil sampai alamat 100h maka untuk lcall dapat lebih
dari itu, namun juga untuk penggunaan lcall membutuhkan memori dan siklus mesin
yang lebih banyak. Saat perintah call dijalankan, isi register PC (Program
Counter) akan disimpan ke dalam stack dan digantikan dengan alamat subrutin
yang dipanggil. Saat subrutin berakhir dengan ditandai perintah ret (return)
register PC akan diisi kembali oleh isi dari stack, dan mikrokontroler akan
menjalankan perintah di bawah baris perintah call tadi.
Format
: acall <label subrutin>
(perintah untuk
memanggil program pada subrutin)
Contoh: acall cinta
lcall <label
subrutin>
(perintah untuk
memanggil program pada subrutin)
Contoh: lcall komputer
·
jmp (jump)
Jmp
juga terbagi menjadi dua format yaitu sjmp (short jump) dan ljmp (long jump),
untuk pengunaannya sama seperti format call pada penjelasan di atas, hanya saja
jump merupakan lompatan sederhana yang tidak dapat mengembalikan nilai register
PC seperti perintah call.
Format : sjmp <label
subprogram>
(lompat atau jalankan
langsung program yang berada pada label suatu subprogram)
Contoh: sjmp kamu
sjmp <alamat
memori>
(lompat atau jalankan
langsung program yang berada pada suatu alamat memori)
Contoh: ljmp 100h
·
djnz (decrement and jump
if not zero)
Format
: djnz rx, <label subprogram>
(kurangi nilai isi data
pada register x dan bila nilainya belum mencapai 0 maka akan dilakukan lompatan
ke label subprogram)
Contoh: djnz r7, lagi
(kurangi nilai isi data
pada register R7 dan bila nilainya belum mencapai 0 maka dilakukan lompatan ke
subprogram dengan label lagi)
·
jnb (jump if not bit
set)
Format : jnb px.y,
<label subprogram>
(lompat ke label
subprogram bila nilai port x.y berlogika LOW atau mempunyai nilai 0)
Contoh: jnb p1.0, go
·
cjne (compare and jump
if not equal)
Format : cjne a, xyz,
<label subprogram>
(bandingkan apakah nilai
akumulator sama dengan nilai xyz, bila nilainya tidak sama maka lompat ke label
subprogram)
Contoh: cjne a, #0fh,
data
cjne rv, xyz, <label
subprogram>
(bandingkan apakah nilai
register v sama dengan nilai xyz, bila nilainya tidak sama maka lompat ke label
subprogram)
Contoh: cjne r1, #0ach,
selesai
·
rr (rotate right)
Format : rr a
(geser ke kanan 1 bit
pada isi akumulator)
rl a
(geser ke kiri 1 bit
pada isi akumulator)
rr rx
(geser ke kanan 1 bit
pada isi register x)
rl rx
(geser ke kiri 1 bit
pada isi register x)
·
inc (increment) dan dec
(decrement)
untuk
perintah yang menggunakan decrement, increment, rotate, compare hanya dapat
dilakukan oleh akumulator maupun register saja. Bila nilai pada suatu port
ingin dilakukan perintah diatas maka port tersebut wajib disalin terlebih
dahulu kedalam akumulator atau register dengan menggunakan perintah mov.
Format : inc a
(menambahkan nilai 1 bit
pada akumulator)
dec a
(mengurangi nilai 1 bit
pada akumulator)
inc rx
(menambahkan nilai 1 bit
pada register x)
dec rx
(mengurangkan nilai 1
bit pada register x)
Tidak ada komentar:
Posting Komentar