Apa itu assembler?
Assembler adalah jenis program komputer yang mengambil instruksi dasar dan mengubahnya menjadi pola bit yang dapat digunakan oleh prosesor komputer untuk menjalankan operasi dasar. Tugas utama assembler adalah mengonversi kode bahasa assembly menjadi kode mesin yang dapat dibaca dan dieksekusi oleh komputer.
Secara sederhana, assembler adalah perangkat lunak yang menerjemahkan instruksi yang ditulis dalam bahasa assembly ke dalam kode mesin yang dapat dibaca oleh komputer. Selain itu, assembler juga bisa menyusun atau mengubah kode bahasa assembly tingkat rendah menjadi kode mesin.
Dalam proses penyusunan, assembler mengubah kode sumber bahasa assembly menjadi kode objek. Kode objek ini terdiri dari serangkaian bit yang dapat langsung dieksekusi oleh prosesor komputer. Beberapa assembler juga memungkinkan penggunaan pernyataan kontrol dan layanan abstraksi data. Ada juga assembler yang mendukung struktur pemrograman berorientasi objek.
Cara kerja assembler
Sebagian besar komputer memiliki seperangkat instruksi dasar yang disebut instruksi assembler, yang sesuai dengan operasi dasar yang dapat dilakukan komputer. Misalnya, instruksi pemuatan (load) memungkinkan prosesor memindahkan rangkaian bit dari lokasi tertentu ke tempat penyimpanan sementara yang disebut register.
Seorang programmer menuliskan serangkaian instruksi assembler untuk membuat kode sumber. Program assembler kemudian mengambil setiap pernyataan dalam program sumber dan menghasilkan aliran bit yang disebut kode objek. Output ini tetap berhubungan dengan program sumber dan dapat dieksekusi kapan saja. Aliran bit dalam program objek disebut sebagai kode mesin.
Assembler juga mengidentifikasi nama simbolik yang terkait dengan setiap instruksi dan mengalokasikan memori untuk setiap instruksi. Selain itu, assembler menjaga program counter atau location counter (LC) untuk melacak alamat memori dari setiap instruksi. Saat memproses instruksi-instruksi ini, assembler memperbarui LC dan menghasilkan kode mesin yang ditargetkan.
Jenis-jenis assembler
Assembler berfungsi sebagai jembatan antara bahasa assembly dan bahasa mesin yang dapat dibaca oleh prosesor dan memori komputer. Ada dua jenis utama assembler, yang dikategorikan berdasarkan jumlah kali program harus memindai kode sumber untuk menerjemahkannya ke dalam bahasa mesin.
Assembler satu lintasan (Single-pass assembler)
Assembler satu lintasan menerjemahkan seluruh program bahasa assembly ke dalam bahasa mesin dalam satu kali pemrosesan. Dalam satu kali pemindaian, assembler menggantikan instruksi pseudo atau simbolik dalam program assembly dengan kode mesin yang dapat dibaca komputer.
Assembler multi-lintasan (Multipass assembler)
Dalam assembler multi-lintasan, program harus dipindai beberapa kali sebelum dapat diterjemahkan sepenuhnya ke dalam bahasa mesin. Pada lintasan pertama, assembler menghasilkan kode simbolik yang mencatat dan memproses instruksi pseudo dalam bahasa assembly. Pada lintasan kedua, assembler menghasilkan kode mesin yang setara.
Bahasa assembly
Awalnya, programmer menulis program langsung dalam bahasa mesin. Seiring waktu, bahasa assembly dikembangkan untuk mempercepat pemrograman. Saat ini, programmer masih menggunakan pemrograman assembly untuk mengontrol operasi prosesor secara lebih efisien, tetapi jenis pemrograman ini membutuhkan pemahaman mendalam tentang set instruksi komputer tertentu.
Bahasa mesin hanya terdiri dari biner — angka 0 dan 1 — sehingga sulit dipahami oleh manusia. Bahasa assembly menggunakan mnemonik, yaitu representasi simbolik dari kode tertentu (dikenal sebagai kode operasi) yang lebih intuitif bagi programmer.
Perbedaan antara assembler dan compiler
Meskipun assembler kadang disebut sebagai kompiler bahasa assembly, assembler dan compiler adalah dua jenis program yang berbeda. Keduanya memang menghasilkan kode mesin, tetapi fungsinya berbeda. Assembler mengonversi bahasa assembly menjadi bahasa mesin, sementara compiler mengubah kode sumber tingkat tinggi seperti C, Java, JavaScript, atau PHP menjadi kode mesin.
Perbedaan lainnya adalah assembler bisa menerjemahkan kode dalam satu atau beberapa lintasan, sedangkan compiler hampir selalu melakukan konversi dalam satu lintasan. Assembler menghasilkan kode biner dalam bentuk aliran 0 dan 1, sedangkan compiler menghasilkan kode mesin dalam bentuk mnemonik.