Jumat, 30 Desember 2011

Bahasa Assembler


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