Apa itu Bahasa Assembly?
Bahasa Assembly adalah merupakan bahasa dasar yang digunakan oleh mikrokontroler atau microprocessor sebelum Bahasa C dikenal. Bahasa ini mungkin memang lebih sulit dipahami dan kurang user friendly, namun bahasa ini lebih optimize sehingga dalam segi ukuran maupun kecepatan akan lebih kecil dan cepat daripada Bahasa C. Hal ini disebabkan karena instruksi-instruksi yang ada dalam Bahasa C sebenarnya adalah kumpulan instruksi-instruksi Bahasa Assembly di mana instruksi tersebut biasanya dirancang dengan fungsi yang universal sehingga seringkali banyak instruksi-instruksi assembly yang belum tentu terpakai. Instruksi-instruksi inilah yang menyebabkan ukuran dan kecepatan kinerja Bahasa C akan lebih besar dan lebih rendah daripada Bahasa Assembly.
Dalam artikel kali ini Bahasa Assembly yang akan saya bahas adalah Bahasa Assembly MCS51.
Program Sumber Assembly
Merupakan program yang ditulis oleh pembuat program berupa kumpulan baris-baris perintah dan biasanya disimpan dengan extension .ASM
Program Obyek
Merupakan file hasil utama dari proses assembly berupa kode-kode yang hanya dikenali oleh mikrokontroler/mikroprosesor dan biasanya disimpan dengan extension .HEX atau .BIN

Assembly Listing
Merupakan file hasil dari proses assembly dalam rupa campuran antara kode-kode yang hanya dikenali oleh mikrokontroler/mikroprosesor, program sumber assembly beserta alamat-alamatnya

Program Assembler
Merupakan perangkat lunak yang dibutuhkan untuk meng-assembly program sumber assembly menjadi program obyek
Program Downloader
Merupakan perangkat lunak yang dibutuhkan untuk mendownload program obyek ke dalam target memori

Program Monitor
Program yang bekerja dalam mikrokontroler dan menunggu perintah perintah dari PC untuk keperluan:
- Pengambilan program obyek yang didownload oleh program downloader di PC dan menyimpan ke target memori
- Eksekusi program obyek yang telah tersimpan di target memori
- Edit program obyek yang telah tersimpan di target memori
Kalau pada era Arduino saat ini program ini mungkin lebih dikenal dengan program bootloader yang ada di arduino namun malah memiliki fungsi yang lebih kompleks karena adanya fungsi:
- Edit program obyek
- Built in function yang dapat dijalankan dengan memanggil alamat-alamat tertentu
- Display dan edit nilai-nilai register
- Real time debugging untuk mendebug jalannya program secara realtime
Bentuk Program Sumber Assembly

Label
Digunakan untuk memberi nama sebuah lokasi memori tertentu agar mempermudah pembuat program untuk membuat loncatan atau percabangan ke memori tersebut. Syarat pembuatan label:
- Harus diawali dengan huruf
- Tidak diperbolehkan adanya label yang sama dalam satu program assembly
- Maksimal 16 karakter (hal ini merupakan batasan kemampuan dari software assembly yang saya gunakan yaitu ALDS)
- Tidak diperbolehkan adanya karakter spasi dalam label
Contoh:
Ajmp IsiMemory
Berarti program akan melompat ke alamat yang diberi label IsiMemory dan menjalankan instruksi-instruksi yang ada di sana.
Mnemonic
Biasa disebut kode operasi atau OpCode, terdiri dari dua macam:
- Kode operasi yang dikerjakan mikrokontroler Berupa kode-kode operasi yang sudah ditentukan oleh produsen mikrokontroler/mikroprosesor seperti: MOV, ADD, MOVX dll
- Kode operasi yang dikerjakan oleh Program Assembler Berupa kode-kode operasi yang ditentukan oleh pembuat Program Assembler (Assembler Directive) seperti: ORG, EQU, DB dll
Operand
Merupakan pelengkap dari mnemonic, namun tidak semua mnemonic memerlukan operand.
CJNE R7,#05H,Aksi1 ;memerlukan 3 operand
MOVX @DPTR,A ;memerlukan 2 operand
RL A ;memerlukan 1 operand
NOP ;tidak memerlukan operand
Operand juga dapat berupa label seperti yang tampak pada instruksi baris pertama
Komentar
Bagian ini tidak harus ada, namun untuk memperjelas jalannya program bagian ini dapat dituliskan sebagai catatancatatan
yang dianggap perlu oleh pembuat program.
Sistem Pengalamatan
- Pengalamatan Langsung
Terdiri dari:
-
- Immediate Data, proses ini terjadi pada instruksi di mana nilai operand itu sendiri adalah merupakan data yang akan dipindahkan dan selalu ditandai dengan lambang #.
- Contoh:
- Mov A,#05H ;Operand kedua yang merupakan data 05H dipindah ke A
Mov A,#Data ;Operand kedua yang merupakan
data yang sebelumnya telah dideklarasikan
dipindah ke A
- Mov A,#05H ;Operand kedua yang merupakan data 05H dipindah ke A
- Pengalamatan Data, proses ini terjadi pada instruksi di mana nilai operand adalah merupakan alamat dari data yang akan diisi dipindahkan atau diolah.
- Contoh:
- Mov P0,A ; berarti isi Acc A dipindah ke alamat register P0 (muncul pada I/O Port 0)
- Mov A,#50h ; Isi alamat 50H dipindah ke Acc A
- Inc 50h ; Isi alamat 50H ditambah 1
- Pengalamatan Tak Langsung
- Proses pengalamatan di mana salah satu operand adalah merupakan register berisikan alamat dari data yang akan diisi atau dipindahkan
- Pengalamatan ini menggunakan lambang @
Contoh:
Mov @R0,A ;Isi Acc A dipindah ke alamat yang ditunjuk oleh R0
Movx @DPTR,A ;Isi Acc A dipindah ke alamat yang ditunjuk oleh DPTR
- Pengalamatan Kode
Merupakan sebuah pengalamatan di mana operand adalah merupakan alamat dari instruksi jump dan call (ACALL, AJMP, LJMP dan LCALL)
Contoh:
Start:
……………….
Ljmp Start ;Program loncat ke alamat yang
diberi oleh label start
- Pengalamatan Bit
Proses pengalamatan yang menunjuk ke memori internal maupun
Register Fungsi Khusus yang mempunyai kemampuan bit
addressable (dapat dialamati secara bit)
Terdapat 3 macam untuk menunjuk sebuah bit address:
-
- Langsung menunjuk ke alamat bit
- Contoh:
- Setb 67h
- Menggunakan Operator Titik (Dot Operator)
- Clr. A.7 ; Clear bit ke tujuh dari Acc A
- Menggunakan Lambang Assembler yang telah ditentukan
- Ditentukan secara standard
- Contoh:
- Clr RI
- Ditentukan secara bebas
- Lambang ini harus ditentukan dahulu dengan menggunakan assembler directive pada awal program
- Contoh:
- Switch bit P1.0
- Tunggu:
- Jb Switch,Tunggu ;Lompat ke label tunggu selama logika P1.0 high
Assembler Directive
- ORG (Origin) untuk menunjukkan lokasi memori tempat instruksi tersimpan
Contoh:
Org 2000H
Mov DPTR,#4000H ;Instruksi ini terletak pada alamat 2000H
- EQU (Equate) untuk menentukan lambang (symbol)
Contoh:
Bilangan EQU 50H ;Lambang Bilangan adalah merupakan data 50H
- DB (Define Byte), untuk memberi nilai tertentu pada memori program
Contoh:
Tabel:
DB 50H ;Pada alamat yang ditunjuk oleh label tabel diberi data 50H
Tabel2:
DB ‘Delta Electronic’ ;Pada alamat yang ditunjuk oleh label tabel2 diberi data tulisan Delta Electronic dalam bentuk ASCII
- DW (Define Word), diikuti dengan label dan berfungsi untuk memberi nilai 2 byte yang diperoleh dari alamat tempat label ini berada pada alamat instruksi ini.
Contoh:
Org 2100H
Lokasi1:
Org 3000H
DW Lokasi1 ;Alamat 3000H dan 3001H diisi dengan data 21H dan 00H
- DS (Define String), selalu diikuti dengan angka dan berfungsi untuk menyediakan tempat sebesar angka tersebut mulai dari alamat assembler directive ini berada. Tempat yang disediakan selalu terletak pada RAM Internal
.DATA
Contoh:
Org 50H
Memori1 Ds 1 1 ;Disediakan tempat sebesar 1 byte mulai dari alamat 50H dari RAM Internal
- .DATA, biasanya diletakkan sebelum deklarasi assembler directive DS yang menunjukkan bahwa baris-baris di bawahnya akan meng-akses ke RAM Internal
- .CODE, menunjukkan bahwa baris-baris di bawahnya akan berupa kode-kode operasi yang akan diisikan ke dalam Memori Eksternal atau Flash PEROM
DELTA ELECTRONIC
Paulus Andi Nalwan, ST