Bahasa pemrograman tingkat rendah (Low-Level Language) adalah bahasa yang sangat dekat dengan instruksi perangkat keras komputer. Bahasa ini menawarkan kontrol maksimal atas sumber daya sistem seperti memori dan CPU, namun membutuhkan pemahaman mendalam tentang arsitektur mesin yang ditargetkan.
Berbeda dengan bahasa tingkat tinggi (High-Level Language) seperti Python atau Java, di mana programmer fokus pada logika bisnis, pada pemrograman tingkat rendah, fokus utama adalah bagaimana instruksi diterjemahkan langsung menjadi kode mesin yang dapat dieksekusi oleh Unit Pemroses Sentral (CPU).
Secara umum, bahasa tingkat rendah dibagi menjadi dua kategori utama yang masing-masing memiliki karakteristik dan tingkat abstraksi yang berbeda:
Ini adalah bentuk bahasa pemrograman paling dasar. Bahasa mesin terdiri dari urutan biner (angka 0 dan 1) yang secara langsung dipahami dan dieksekusi oleh CPU. Tidak ada penerjemahan lebih lanjut yang diperlukan.
10110000 01100001 (Ini adalah representasi abstrak dari instruksi tertentu dalam biner).
Bahasa Assembly adalah langkah abstraksi satu tingkat di atas Bahasa Mesin. Ia menggunakan singkatan atau mnemonik (seperti MOV, ADD, JMP) untuk mewakili instruksi biner. Namun, bahasa ini tetap sangat spesifik pada arsitektur CPU (misalnya, x86, ARM).
Setiap instruksi Assembly biasanya diterjemahkan satu-ke-satu menjadi satu instruksi Mesin menggunakan program kecil yang disebut Assembler.
Salah satu contoh paling umum dari bahasa tingkat rendah adalah Assembly, khususnya varian untuk arsitektur Intel x86.
Misalnya, untuk memindahkan nilai 5 ke dalam register AL (sebuah bagian kecil dari CPU), sintaks Assembly-nya mungkin terlihat seperti ini:
MOV AL, 5
Instruksi MOV adalah singkatan untuk "Move" (Pindahkan). Jika diterjemahkan ke kode mesin, instruksi ini akan menjadi serangkaian byte biner yang jauh lebih kompleks.
Meskipun bahasa tingkat tinggi mendominasi pengembangan perangkat lunak modern karena kemudahan penggunaannya, bahasa tingkat rendah tetap vital dalam domain tertentu yang menuntut performa ekstrem atau interaksi langsung dengan perangkat keras:
Perbedaan utama terletak pada tingkat abstraksi. Bahasa tingkat tinggi memungkinkan programmer berpikir dalam istilah masalah yang mereka coba pecahkan (misalnya, "buat objek pelanggan"), sedangkan bahasa tingkat rendah memaksa programmer untuk berpikir dalam istilah fisik mesin (misalnya, "letakkan nilai ini di alamat memori X dan gunakan register Y untuk perhitungan").
Meskipun demikian, pemahaman tentang bahasa tingkat rendah sangat berharga bagi setiap insinyur perangkat lunak, karena membantu dalam memahami bagaimana kompiler bekerja, bagaimana memori dikelola, dan bagaimana kinerja program dioptimalkan pada level terkecil.