Bahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputer, mikroprosesor, pengendali mikro, dan perangkat lainnya yang dapat diprogram. Bahasa rakitan mengimplementasikan representasi atas kode mesin dalam bentuk simbol-simbol yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu. Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun demikian, bahasa rakitan memungkinkan programmer memanfaatkan secara penuh kemampuan suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.
Berikut dasar-dasar perintah bahasa assembly yang biasa digunakan pada mikrokontroller MCS-51 adalah sebagai berikut :
- Clr : mereset atau memberi nilai 00h.
- Mov : menyalin suatu nilai.
- setb : memberikan logika 1 pada port.
- Call : memanggil perintah program yang ditentukan.
- sjmp : lompat ke label program dan langsung menjalankannya.
- Djnz : mengurangi nilai pada register, bila belum mencapai 0 maka akan dilakukan lompatan ke label sub program.
- Jnb : lompat kelabel subprogram bila nilai port berlogika LOW.
- Cjne : bandingkan, bila nilai port tidak sama maka lompat.
- rr / rl : geser kanan 1 bit pada isi akumulator / kiri 1bit
- inc / dec : menambahkan nilai 1 bit pada akumulator / mengurangi nilai 1 bit pada akumulator.
Contoh program Bahasa Assembly yang digunakan sebagai pengendali sensor air yaitu:
$mod51
org 0h
mov p0, #0ffh
mov p1, #0ffh
mov p2, #0ffh
mov p3, #0ffh
awal : mov a,p2
sensor1 : cjne a,#0bfh, sensor2
mov p1,#0feh
sjmp awal
sensor2 : cjne a,#0afh, sensor3
mov p1, #0fah
sjmp awal
sensor3 : cjne a,#0abh, sensor4
mov p1, #0eah
sjmp awal
sensor4 : cjne a,#0aah, awal
mov p1, #0aah
sjmp awal
end
Penjelasan Program:
- $mod51: Instruksi ini digunakan sebagai inisialisasi pada simulator bahwa program yang digunakan menggunakan bahasa assembly.
- Org 0h : Instruksi ini menunjukan bahwa penulisan program dimulai dari alamat 0 hexa pada mikrokontroler.
- Mov P0, #0ffh : Menyalin nilai ff ke port 0 (menunjukan bahwa)
- Mov P1, #0ffh : Menyalin nilai ff ke port 1 (pada port tersebut)
- Mov P2, #0ffh : Menyalin nilai ff ke port 2 (dalam keadaan high)
- Mov P3, #0ffh : Menyalin nilai ff ke port 3 (berlogika 1)
- Awal : Sebagai label.
• Mov a,p2 : Mengisi akumulator a dengan register p2.
- Sensor1 : Sebagai label.
• Cjne a,#0bfh,sensor : memeriksa apakah nilai yang sudah disimpan di A sama dengan #0bfh,
jika tidak maka Jump ke sensor2.
• Mov P1,#0feh : Menyalin nilai 0feh ke port P1.
• Sjmp awal : Kembali ke lebel awal.
- Sensor2 : Sebagai label.
• Cjne a,#0afh,sensor : memeriksa apakah nilai yang sudah disimpan di A sama dengan #0afh, jika tidak maka Jump ke sensor3.
• Mov P1,#0afh : Menyalin nilai 0afh ke port P1.
• Sjmp awal : Kembali ke label awal.
- Sensor3 : Sebagai label.
• Cjne a,#0abh,sensor : memeriksa apakah nilai yang sudah disimpan di A sama dengan #0abh, jika tidak maka Jump ke sensor4.
• Mov P1,#0eah : Menyalin nilai 0eah ke port P1.
• Sjmp awal : Kembali ke lebel awal.
- Sensor4 : Sebagai label.
• Cjne a,#0aah,awal : memeriksa apakah nilai yang sudah disimpan di A sama dengan #0bfh, jika tidak maka Jump ke awal.
• Mov P1,#0aah : Menyalin nilai 0aah ke port P1.
• Sjmp awal : Kembali ke lebel awa.
- End : Mengakhiri program.