Kompilasi oleh : Reza Ervani bin Asmanu
Dalam dunia teknologi informasi, bahasa Assembly merupakan jembatan paling murni antara logika manusia dan sirkuit fisik prosesor. Memahami instruksi-instruksi ini berarti memahami bagaimana sebuah komputer “berpikir” dari detik pertama ia dinyalakan. Pada era BIOS (Real Mode), instruksi-instruksi ini sangat krusial dalam membangun fondasi sebuah sistem operasi.
Artikel ini menyajikan daftar lengkap instruksi Assembly x86 yang dikategorikan berdasarkan fungsi utamanya.
1. Instruksi Perpindahan Data (Data Movement)
Kategori ini mengatur bagaimana data disalin atau dipindahkan antar register, memori, dan stack.
| Instruksi | Nama | Fungsi Utama |
| MOV | Move | Menyalin data dari sumber ke tujuan. |
| XCHG | Exchange | Menukar nilai antara dua register atau memori. |
| PUSH / POP | Push / Pop | Memasukkan atau mengambil data dari Stack. |
| PUSHA / POPA | Push/Pop All | Menyimpan/mengambil seluruh register umum sekaligus. |
| PUSHF / POPF | Push/Pop Flags | Menyimpan atau mengambil isi register status (Flags). |
| LEA | Load Effective Address | Menghitung alamat memori tanpa mengambil datanya. |
| LDS / LES | Load Segment | Mengisi register segmen (DS/ES) bersamaan dengan register umum. |
| XLAT | Translate | Melakukan konversi data menggunakan tabel pencarian (lookup table). |
2. Instruksi Aritmetika Binari dan Desimal
Instruksi ini menangani perhitungan matematis dasar. Arsitektur x86 memiliki instruksi khusus untuk menangani angka desimal (BCD) yang lazim pada sistem komputer klasik.
Aritmetika Binari
| Instruksi | Fungsi |
| ADD / ADC | Penjumlahan (dengan atau tanpa Carry). |
| SUB / SBB | Pengurangan (dengan atau tanpa Borrow). |
| INC / DEC | Menambah atau mengurangi nilai sebesar 1. |
| MUL / IMUL | Perkalian (untuk bilangan positif saja atau bertanda). |
| DIV / IDIV | Pembagian (menghasilkan hasil bagi dan sisa). |
| NEG | Mengubah tanda bilangan (positif ke negatif dan sebaliknya). |
Aritmetika Desimal (Legacy/BCD)
| Instruksi | Nama | Deskripsi |
| AAA / AAS | ASCII Adjust | Menyesuaikan hasil penjumlahan/pengurangan dalam format ASCII. |
| DAA / DAS | Decimal Adjust | Menyesuaikan hasil dalam format Packed BCD. |
| AAM / AAD | ASCII Adjust Mul/Div | Penyesuaian khusus setelah operasi perkalian atau sebelum pembagian. |
3. Operasi Logika dan Manipulasi Bit
Digunakan untuk melakukan operasi Boolean dan pergeseran bit yang krusial untuk efisiensi pemrograman.
| Instruksi | Fungsi |
| AND / OR / XOR | Operasi logika standar untuk memanipulasi bit tertentu. |
| NOT | Membalikkan semua bit (Inversi). |
| SHL / SHR | Menggeser bit ke kiri atau kanan (Perkalian/Pembagian eksponensial). |
| ROL / ROR | Memutar posisi bit ke kiri atau kanan. |
| RCL / RCR | Memutar bit dengan menyertakan Carry Flag. |
| TEST | Memeriksa kondisi bit tanpa mengubah nilai register. |
4. Instruksi Manipulasi String dan Memori Blok
Instruksi ini memungkinkan prosesor memproses sekumpulan data (teks atau array) dengan kecepatan sangat tinggi.
| Instruksi | Deskripsi |
| MOVSB / MOVSW | Menyalin blok data (Byte atau Word) dari satu lokasi ke lokasi lain. |
| LODSB / LODSW | Memuat data dari memori ke register AL/AX untuk diproses. |
| STOSB / STOSW | Menyimpan data dari register ke memori (sering untuk hapus layar). |
| CMPSB / CMPSW | Membandingkan dua blok memori karakter demi karakter. |
| SCASB / SCASW | Mencari karakter tertentu dalam sebuah blok memori. |
| REP / REPE / REPNE | Prefiks untuk mengulang instruksi di atas secara otomatis. |
5. Instruksi Alur Kendali (Control Flow)
Menentukan bagaimana program melompat, bercabang, atau menjalankan fungsi berdasarkan kondisi tertentu.
| Instruksi | Fungsi |
| JMP | Lompatan tanpa syarat ke alamat tertentu. |
| JZ / JNZ | Lompatan berdasarkan kondisi Zero Flag (Nol atau Tidak Nol). |
| JC / JNC | Lompatan berdasarkan Carry Flag (Error atau Sukses). |
| JA / JB / JG / JL | Lompatan berdasarkan perbandingan angka (Lebih besar/Lebih kecil). |
| CALL / RET | Menjalankan prosedur (fungsi) dan kembali ke jalur utama. |
| LOOP / LOOPZ | Perulangan otomatis berdasarkan isi register CX. |
| INT / IRET | Memanggil layanan interupsi (BIOS) dan kembali darinya. |
6. Instruksi Kontrol Prosesor dan Input/Output
Instruksi tingkat rendah untuk berkomunikasi langsung dengan perangkat keras dan mengatur kondisi CPU.
| Instruksi | Nama | Deskripsi |
| IN / OUT | Input / Output | Mengambil atau mengirim data ke port perangkat keras (misal: Disk). |
| CLC / STC | Clear/Set Carry | Mengatur status Carry Flag secara manual. |
| CLD / STD | Clear/Set Direction | Menentukan arah pemrosesan string (maju atau mundur). |
| CLI / STI | Clear/Set Interrupt | Menonaktifkan atau mengaktifkan interupsi perangkat keras. |
| HLT | Halt | Menghentikan kerja CPU hingga ada interupsi baru. |
| NOP | No Operation | Instruksi kosong untuk memberikan jeda waktu atau penyelarasan kode. |
| WAIT | Wait | Sinkronisasi dengan prosesor pembantu (Coprocessor). |
Kesimpulan
Seluruh instruksi di atas merupakan “bahan baku” yang digunakan untuk membangun sistem paling dasar pada komputer. Dalam pengembangan sistem operasi bergaya XV6, penguasaan atas instruksi-instruksi ini memungkinkan seorang pengembang untuk mengatur memori, menampilkan teks, dan memproses input pengguna secara presisi. Meskipun teknologi telah berkembang ke arah 64-bit, instruksi-instruksi Real Mode ini tetap menjadi titik awal sejarah yang wajib dipahami oleh setiap arsitek sistem.