1
BAHASA PEMOGRAMAN AT89S/Cxx (assembly) Operand dalam pemograman mikrokontroler adalah data yang tersimpan dalam memory, register dan input/output (I/O). Instruksi yang dikenal secara umum dikelompokan menjadi beberapa kelompok yaitu instruksi untuk pemindahan data, aritmatika, operasi logika, pengaturan aliran program dan beberapa hal khusus. Mode pengalamatan dalam MCS51 yaitu: 1. Mode pengalamatan segera (immediate addresing mode) Cara ini menggunakan konstanta, misalnya: MOV A,#20h. Data konstan merupakan data yang menyatu dengan instruksi, contoh instruksi di atas mempunyai arti bahwa data konstantanya, yaitu 20h, ( sebagai data konstan harus diawali ’#’ dan tanda h untuk menyatakan format bilangan heksadesimal ) disalin di akumulator A. Yang perlu diperhatikan dalam instruksi ini adalah bilangan 20h merupakan bagian dari instruksi ( menjadi satu dengan op-kode instruksi ). 2. Mode pengalamatan langsung ( direct addresing mode ) Cara ini dipakai untuk menunjuk data yang berada di suatu lokasi memory dengan cara menyebut lokasi (alamat) memory tempat data itu berada, misalnya MOVA,30. Instruksi ini mempunyai arti bahwa data yang berada di dalam memory dengan lokasi 30h disalin ke akumulator. Sekilas instruksi ini sama dengan instruksi sebelumnya, namun terdapat perbedaan pada tanda ”#”, jika instruksi pertama menggunakan tanda ’#’ yang menandai 20h sebagai data konstan, sedangkan dalam instruksi kedua karena tidak menggunakannya, maka 30h diartikan sebagai suatu lokasi memory. Selain dari itu operan yang digunakan dapat berupa bilangan bertanda mulai dari -256 sampai +256. Hal ini telah dijelaskan oleh Widodo budiharto ( 2005:47 ) yang mengatakan bahwa ”operan yang digunakan pada pengalamtan langsung / immedied data dapat berupa bilangan bertanda, mulai dari -255 hingga +256”. a. Mode pengalamatan tidak langsung (indirect addresing mode) Cara ini dipakai untuk mengakses data yang berada dalam memory, tetapi lokasi memory tidak disebut secara langsung tetapi dititipkan ke register lain. Untuk pengelamatan tak langsung digunakan simbol @. Hal ini sejalan dengan pendapat Widodo Budiharto ( 2005: 47 ) yang mengatakan bahwa ”untuk melakukan pengelamatan tak langsung digunakan simbol @. Pengelamatan jenis ini biasanya biasa digunakan untuk melakukan penulisan, pemindahan, atau pembacaan beberapa data dalam lokasi memory ”. Misalnya: MOVA.@R0. Dalam instruksi ini register serba guna R0 dipakai untuk menyimpan lokasi memory, sehingga instruksi ini ©2011 Http://circuitbooks.wordpress.com
2 mempunyai arti memory yang alamatnya tersimpan dalam R0 isinya disimpan di akumulator A. Tanda ’@’ dipakai untuk menandai lokasi memory yang tersimpan dalam R0. Bandingkan dengan instruksi penyebutan lokasi memory secara langsung sebelumnya, dalam instruksi ini lokasi memory terlebih dulu disimpan di R0 dan R0 berperan sebagai penunjuk lokasi memory penyimpan data yang akan diakses, sehingga kalau nilai R0 berubah, maka lokasi memory yang ditunjuk juga akan berubah pula (beserta isinya jika berbeda). Dalam instruksi ini register serba guna R0 berfungsi sebagai register penyimpan alamat (indirect address register), selain R0 register serbaguna lainnya, R1 juga bisa dipakai sebagai register penampung alamat. b. Mode pengalamatan register (register addresing mode) Misalnya : MOVA,R5, instruksi ini mempunyai arti bahwa data dalam register serbaguna R5 disalin ke akumulator A. Instruksi ini menjadikan register serba guna R0 sampai R7 dapat digunakan sebagai penyimpan data yang praktis dan kerjanya sangat cepat. Data-data yang disebut di dalam pembahasan tersebut semuanya berada dalam memory data (termasuk register serba guna). Dalam penulisan program sering diperlukan tabel baku yang disimpan bersama dengan program yang bersangkutan, sehingga tabel semacam ini merupakan data dalam memory program (menjadi satu dalam program). c. Mode pengalamatan kode tidak langsung (code indirect addresing mode) MCS51 mempunyai cara penyebutan data dalam memory program yang dilakukan secara tak langsung, misalnya: MOVC A,@A+DPTR. Dalam instruksi ini instruksi MOV diganti dengan MOVC tambahan huruf C tersebut dimaksud untuk membedakan bahwa instruksi ini digunakan untuk memory program (MOV tanpa huruf C artinya digunakan untuk memory data). Tanda ’@’ digunakan untuk menandai A+DPTR yang berfungsi untuk menyatakan lokasi memory yang isinya disalin ke akumulator A, data yang tersimpan dalam DPTR (data pointer register-2 byte) ditambah dengan nilai yang tersimpan dalam akumulator A (1 byte) sama dengan lokasi memory program yang diakses. Program Assembly merupakan program yang ditulis oleh pembuat program berupa kumpulan baris-baris perintah yang biasanya disimpan dengan extention. ASM. Program ini terdiri atas beberapa bagian yang dijelaskan sebagai berikut: (1) Label Label berguna untuk memberikan nama pada alamat-alamat yang dituju untuk mempermudah programmer dalam membuat program. Label digunakan sebagai cacatan dari
©2011 Http://circuitbooks.wordpress.com
3 alur program. Dalam program sebuah label harus diawali dengan huruf, tidak boleh ada label yang sama dan maksimal 16 karakter. (2) Mnemonic Mnemonic merupakan singkatan dari perintah. Mnemonic bisa disebut juga kode operasi (opcode), yaitu kode-kode yang akan dikerjakan oleh program assembly yang ada pada komputer dan mikrokontroler. Opcode yang dikerjakan oleh mikrokontroler sangat tergantung pada jenis mikrokontroler yang digunakan. Contoh, untuk keluarga MCS51 digunakan MOVX, ADD, MOV, dan lain-lain. Sedangkan kode operasi yang digunakan oleh program assembly yang ada pada komputer tergantung pada program assembly yang digunakan. Contoh: ORG, EQU,DB, dan lain-lain. (3) Operand Operand merupakan pelengkap dari mnemonic. Jumlah operand yang dibutuhkan oleh sebuah mnemonic tidak selalu sama, sebuah mnemonic dapat memiliki tiga, dua, satu bahkan tidak memiliki operand. Contoh: CJNE R7,#07H,AKSI
; memerlukan tiga operand
Berfungsi untuk melompat ke label ditunjuk sejauh 64 kilobyte MOVX @DPTR,A
; memerlukan dua operand
(4) Komentar Komentar merupakan bagian yang menjelaskan proses-proses kerja pada bagian-bagian program, biasanya diawali dengan tanda “...” dan dapat diletakkan pada bagian manapun dari suatu program. Contoh: MOV A,P1 ; mengambil data dari port 1 disalin ke akumulator Beberapa instruksi yang digunakan dengan bahasa assembly pada program, yaitu sebagai berikut : a) MOV, MOVC dan MOVX 1) Instruksi MOV digunakan untuk menyalin data antara 2 operand.
©2011 Http://circuitbooks.wordpress.com
4 2) Instruksi MOVC digunakan untuk menyalin data yang terdapat pada memori program internal. 3)
Instruksi MOVX digunakan untuk menyalin data yang terdapat pada memori program eksternal.
Tabel 3.Contoh instruksi MOV Contoh Syntax MOV A,R1
Keterangan Salin nilai R1 ke akumulator MOV A,@R1 Salin isi lokasi yang ditunjuk R1 ke A MOV A,P1 Salin data pada port 1 ke akumulator MOV P1,A Salin data pada akumulator ke port 1 MOVC Salin data internal yang A,@X+DPTR ditunjuk DPTR ke A MOVX Salin data eksternal yang A,@+DPTR ditunjuk DPTR ke A MOVX Salin data akumulator ke @DPTR,A lokasi yang ditunjuk DPTR Sumber : ( Putra 2002 )
b) ADD dan SUBB 1) Instruksi ADD digunakan untuk melakukan operasi penjumlahan akumulator dengan suatu operand dan hasilnya disimpan dalam akumulator. 2) Instruksi SUBB digunakan untuk melakukan operasi pengurangan akumulator dengan suatu operand dan hasilnya disimpan dalam akumulator. Tabel 4.Contoh instruksi ADD dan SUBB Contoh Syntax Keterangan ADD A, #20 A = A + 20 ADD A, @R0 A = A + [R0] SUBB A,B A=A-B Sumber : (Putra 2002) c) MUL AB dan DIV AB 1) Instruksi MUL AB digunakan untuk melakukan operasi perkalian antara akumulator dengan register B. Hasilnya berupa data 16 bit dengan low byte pada A dan high byte pada B. ©2011 Http://circuitbooks.wordpress.com
5 2) Instruksi DIV AB digunakan untuk melakukan operasi pembagian antara akumulator dengan register B. Hasilnya, pembagian disimpan pada akumulator dan sisa pembagian disimpan pada register B. d) DEC dan INC 1) Instruksi DEC digunakan untuk melakukan pengurangan sebesar satu pada suatu operand. 2) Instruksi INC digunakan untuk melakukan penambahan sebesar satu pada suatu operand Tabel 5.Contoh instruksi DEC dan INC Contoh Keterangan Syntax DEC A A=A–1 DEC @R0 [R0] = [R0] – 1 INC A A=A+1 INC DPTR DPTR = DPTR + 1 Sumber : ( Putra 2002 ) e) ORL, ANL dan CPL 1) Instruksi ORL digunakan untuk melakukan operasi OR antara dua operand. 2) Instruksi ANL digunakan untuk melakukan operasi AND antara dua operand. 3) Instruksi CPL digunakan untuk melakukan operasi komplemen suatu operand. Tabel 6.Contoh instruksi ORL,ANL,dan CPL Contoh Akumulator Syntax ORL 0011 1010 A,B ANL 0011 1010 A,B CPL A 0011 1010
Register B 1111 0000 1111 0000 ---- ----
Hasil 1111 1010 0011 0000 1100 0101
Sumber : ( Putra 2002) f) RR, RL dan SWAP 1) Instruksi RR digunakan untuk melakukan operasi pergeseran ke kanan sebanyak 1 bit. 2) Instruksi RL digunakan untuk melakukan operasi pergeseran ke kiri sebanyak 1 bit.
©2011 Http://circuitbooks.wordpress.com
6 3) Instruksi SWAP digunakan untuk melakukan operasi pertukaran data low nible dan high nible. Tabel 7.Contoh instruksi RR,RL dan SWAP Contoh Akumulator Hasil Syntax RR 0011 1010 0001 1101 A RL 0011 1010 0111 0100 A SWAP 0011 1010 1010 0011 A Sumber : ( Putra 2002 ) g) SETB dan CLR 1) Instruksi SETB digunakan untuk memberikan logika 1 pada bit operand. 2) Instruksi CLR digunakan untuk memberikan logika 0 pada bit operand. Tabel 8.Contoh instruksi SETB dan CLR Contoh Syntax SETB P2.0
Keterangan
Menset isi suatu alamat bit P2.0 menjadi 1 CLR P2.1 Mereset isi alamat P2.1 menjadi 00H Sumber : ( Putra 2002 )
h) PUSH dan POP 1) Instruksi PUSH digunakan untuk menyimpan operand ke dalam stack. 2) Instruksi POP digunakan untuk mengembalikan nilai operand dari stack. Tabel 9.Contoh instruksi PUSH dan POP Contoh Keterangan Syntax Menaikkan stack pointer kemudian menyimpan isinya ke suatu PUSH 4DH alamat data pada lokasi yang ditunjukkan oleh stack pointer POP PSW
i)
Menempatkan byte yang ditunjukkan oleh stack pointer ke suatu alamat data, kemudian mengurangi satu isi stack pointer Sumber : (Putra 2002 )
JMP, JB, JNB, JZ, JNZ dan CJNE 1) Instruksi JMP (Jump) digunakan untuk melakukan lompatan ke suatu blok program.
©2011 Http://circuitbooks.wordpress.com
7 2) Instruksi JB (Jump if Bit) dan JNB (Jump if Not Bit) digunakan untuk melakukan lompatan ke suatu blok program jika nilai operand 1 (Bit) atau 0 (Not Bit). 3) Instruksi JZ (Jump if Zero) dan JNZ (Jump if Not Zero) digunakan untuk melakukan lompatan ke suatu blok program jika nilai operand 0 (Zero) atau <> 0 (Not Zero). 4) Instruksi CJNE (Compare and Jump if Not Equal) digunakan untuk melakukan pembandingan dua operand dan lompat ke blok program lain jika tidak sama. Tabel 10.Contoh instruksi JMP dan CJNE Contoh Syntax
Keterangan Menambah isi akumulator JMP @A+DPTR dengan isi data pointer dan meloncat ke alamat kode sesuai hasil penjumlahan Membandingkan data langsung dengan lokasi CJNE memori yang dialamati @R1,#01H,0009H register r. Apabila tidak sama, eksekusi akan menuju ke alamat kode. Bila sama, instruksi selanjutnya yang akan dijalankan Sumber : ( Putra 2002 )
j)
CALL dan RET 1) Instruksi CALL digunakan untuk memanggil prosedur tertentu dalam program (subprogram). 2) Instruksi RET digunakan untuk mengembalikan ke baris program yang melakukan CALL.
©2011 Http://circuitbooks.wordpress.com