Pemrograman bahasa Assembly (sering disingkat ASM) adalah tingkat terendah dalam pemrograman yang masih dapat dibaca manusia. Berbeda dengan bahasa tingkat tinggi seperti Python atau Java yang sangat abstrak dari perangkat keras, Assembly adalah bahasa simbolik yang secara langsung memetakan instruksi mesin (kode biner) yang dipahami oleh Unit Pemroses Sentral (CPU) komputer. Mempelajari Assembly bukan hanya latihan nostalgia, melainkan membuka pemahaman fundamental tentang bagaimana komputer bekerja pada level paling inti.
Setiap jenis arsitektur CPU (misalnya x86, ARM, MIPS) memiliki set instruksinya sendiri. Bahasa Assembly menggunakan mnemonik (singkatan mudah diingat, seperti `MOV` untuk memindahkan data, atau `ADD` untuk penjumlahan) untuk menggantikan kode operasi biner (opcode). Setiap baris kode Assembly umumnya hanya mewakili satu instruksi mesin.
Program yang ditulis dalam Assembly harus melalui proses yang disebut perakitan (assembly) menggunakan program bernama Assembler, yang kemudian menerjemahkan mnemonik tersebut menjadi kode mesin yang dapat dieksekusi langsung oleh CPU.
Meskipun pengembangan dalam Assembly sangat memakan waktu dan rentan terhadap kesalahan, ada tiga alasan utama mengapa bahasa ini masih relevan:
Sebuah instruksi Assembly umumnya terdiri dari label (opsional), mnemonic, dan operand. Operand bisa berupa register CPU, alamat memori, atau nilai konstanta.
; Contoh Sederhana (Arsitektur x86-like)
SECTION .data ; Bagian data
pesan db 'Hello ASM', 0ah
SECTION .text ; Bagian kode
global _start
_start:
; Memindahkan nilai 10 ke register EAX
MOV EAX, 10
; Menambahkan nilai 5 ke EAX (EAX = 15)
ADD EAX, 5
; Menggunakan instruksi untuk memanggil sistem operasi (System Call)
MOV EBX, EAX ; Pindahkan hasil ke register lain
MOV EAX, 1 ; Kode syscall untuk write (menulis)
INT 0x80 ; Eksekusi panggilan sistem
Seringkali, orang menyamakan Assembly dengan kode mesin. Kode mesin adalah urutan bit (0 dan 1) yang dieksekusi langsung oleh CPU. Bahasa Assembly hanyalah representasi simbolik yang mudah dibaca dari kode mesin tersebut. Tanpa Assembler, kita harus menghafal urutan biner yang panjang, yang sangat tidak praktis.
Tantangan terbesar dalam Assembly adalah portabilitas dan kompleksitas. Kode yang ditulis untuk arsitektur Intel (x86) tidak akan berfungsi pada arsitektur ARM tanpa penulisan ulang yang signifikan. Selain itu, manajemen register, alokasi memori, dan penanganan interupsi harus dilakukan secara eksplisit oleh programmer, meningkatkan risiko bug yang sulit dilacak, terutama dalam program besar.
Meskipun demikian, pemahaman mendalam tentang Assembly memberikan perspektif yang tak ternilai harganya. Ini membantu programmer tingkat tinggi memahami batasan, potensi, dan cara kerja kompiler mereka sendiri. Menguasai Assembly berarti menguasai fondasi komputasi modern.
Artikel ini berfokus pada konsep umum pemrograman tingkat rendah.