Kompilasi oleh : Reza Ervani bin Asmanu
Dalam pengembangan sistem operasi berbasis bare metal pada Raspberry Pi (khususnya Generasi 1 yang menggunakan prosesor ARM1176JZF-S), pemahaman terhadap set instruksi atau Instruction Set Architecture (ISA) adalah fundamental yang mutlak.
Berbeda dengan pemrograman tingkat tinggi (seperti C atau Python), bahasa Assembly menuntut kita untuk berkomunikasi langsung dengan register prosesor. Arsitektur ARMv6 menganut filosofi RISC (Reduced Instruction Set Computer) dengan model Load/Store. Artinya, prosesor hanya dapat mengolah data yang sudah berada di dalam register, dan instruksi akses memori dipisahkan secara ketat dari instruksi pengolahan data.
Berikut adalah rangkuman instruksi esensial yang dikelompokkan berdasarkan fungsinya, sebagai referensi dalam penulisan kernel sistem operasi.
1. Instruksi Pemindahan & Pengolahan Data
Kelompok instruksi ini beroperasi sepenuhnya di dalam register CPU. Instruksi ini digunakan untuk manipulasi aritmatika, logika bit, dan pemindahan nilai antar register.
| Mnemonic | Nama Instruksi | Deskripsi Fungsi |
| MOV | Move | Menyalin data dari satu register ke register lain (atau nilai konstan ke register). |
| MVN | Move Not | Menyalin data dengan membalik seluruh bit-nya (inversi bitwise). |
| ADD | Add | Menjumlahkan dua operan dan menyimpan hasilnya di register tujuan. |
| SUB | Subtract | Mengurangkan operan kedua dari operan pertama. |
| RSB | Reverse Subtract | Pengurangan terbalik (Operan 2 dikurangi Operan 1). Berguna untuk operasi negasi. |
| MUL | Multiply | Perkalian integer 32-bit. |
| AND | Logical AND | Operasi logika AND. Sering digunakan untuk masking (memfilter) bit tertentu. |
| ORR | Logical OR | Operasi logika OR. Digunakan untuk mengaktifkan bit tertentu tanpa mengubah bit lain. |
| EOR | Exclusive OR | Operasi logika XOR. Digunakan untuk membalik nilai bit tertentu (toggling). |
| BIC | Bit Clear | Operasi logika AND dengan inversi. Digunakan untuk membersihkan (meng-nol-kan) bit tertentu. |
2. Instruksi Akses Memori (Load & Store)
Mengingat arsitektur Load/Store pada ARM, instruksi di bawah ini adalah satu-satunya cara untuk memindahkan data antara Memori Utama (RAM/Periferal) dan Register CPU.
| Mnemonic | Nama Instruksi | Deskripsi Fungsi |
| LDR | Load Register | Membaca data 32-bit dari alamat memori ke dalam register. |
| STR | Store Register | Menulis data 32-bit dari register ke alamat memori. |
| LDRB | Load Byte | Membaca data 8-bit (1 byte) dari memori. |
| STRB | Store Byte | Menulis data 8-bit (1 byte) ke memori. |
| LDM | Load Multiple | Membaca sekumpulan data dari memori ke banyak register sekaligus (efisiensi tinggi). |
| STM | Store Multiple | Menyimpan isi banyak register ke memori secara berurutan. |
| PUSH | Push to Stack | Menyimpan data register ke puncak Stack (tumpukan memori). |
| POP | Pop from Stack | Mengambil data dari puncak Stack dan mengembalikannya ke register. |
3. Instruksi Percabangan & Perbandingan
Instruksi ini digunakan untuk mengontrol alur program (Flow Control), seperti pembuatan logika if-else, perulangan (loop), dan pemanggilan fungsi.
| Mnemonic | Nama Instruksi | Deskripsi Fungsi |
| CMP | Compare | Membandingkan dua nilai dengan melakukan pengurangan bayangan (hanya memperbarui flag status). |
| TST | Test | Memeriksa apakah bit tertentu aktif (operasi AND tanpa menyimpan hasil, hanya update flag). |
| B | Branch | Lompat ke alamat instruksi lain (setara dengan GOTO). |
| BL | Branch with Link | Lompat ke alamat fungsi dan menyimpan alamat kembali di Link Register (LR). Digunakan untuk pemanggilan subrutin. |
| BX | Branch Exchange | Lompat ke alamat yang tersimpan di register. Umumnya digunakan untuk kembali (return) dari fungsi. |
4. Instruksi Pergeseran Bit & Sistem
Sangat krusial dalam pemrograman sistem tingkat rendah untuk manipulasi perangkat keras (driver) dan manajemen status prosesor.
| Mnemonic | Nama Instruksi | Deskripsi Fungsi |
| LSL | Logical Shift Left | Menggeser bit ke kiri. Efektif untuk perkalian dengan kelipatan 2. |
| LSR | Logical Shift Right | Menggeser bit ke kanan. Efektif untuk pembagian bilangan unsigned dengan kelipatan 2. |
| ASR | Arithmetic Shift Right | Menggeser bit ke kanan dengan mempertahankan tanda (positif/negatif). |
| ROR | Rotate Right | Memutar bit ke kanan; bit yang keluar dari LSB (Least Significant Bit) akan masuk kembali ke MSB (Most Significant Bit). |
| MRS | Move to Register from Status | Menyalin isi Current Program Status Register (CPSR) ke register umum. |
| MSR | Move to Status from Register | Menulis nilai baru ke Current Program Status Register (CPSR). Berbahaya jika tidak hati-hati. |
| SWI / SVC | Software Interrupt | Memicu interupsi software. Mekanisme utama untuk melakukan System Call ke kernel. |
| NOP | No Operation | Instruksi kosong. Tidak melakukan apa pun, hanya memakan satu siklus jam (berguna untuk timing). |
