Referensi Dasar Instruksi Assembly ARMv6 untuk Pengembangan Sistem Operasi

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.

MnemonicNama InstruksiDeskripsi Fungsi
MOVMoveMenyalin data dari satu register ke register lain (atau nilai konstan ke register).
MVNMove NotMenyalin data dengan membalik seluruh bit-nya (inversi bitwise).
ADDAddMenjumlahkan dua operan dan menyimpan hasilnya di register tujuan.
SUBSubtractMengurangkan operan kedua dari operan pertama.
RSBReverse SubtractPengurangan terbalik (Operan 2 dikurangi Operan 1). Berguna untuk operasi negasi.
MULMultiplyPerkalian integer 32-bit.
ANDLogical ANDOperasi logika AND. Sering digunakan untuk masking (memfilter) bit tertentu.
ORRLogical OROperasi logika OR. Digunakan untuk mengaktifkan bit tertentu tanpa mengubah bit lain.
EORExclusive OROperasi logika XOR. Digunakan untuk membalik nilai bit tertentu (toggling).
BICBit ClearOperasi 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.

MnemonicNama InstruksiDeskripsi Fungsi
LDRLoad RegisterMembaca data 32-bit dari alamat memori ke dalam register.
STRStore RegisterMenulis data 32-bit dari register ke alamat memori.
LDRBLoad ByteMembaca data 8-bit (1 byte) dari memori.
STRBStore ByteMenulis data 8-bit (1 byte) ke memori.
LDMLoad MultipleMembaca sekumpulan data dari memori ke banyak register sekaligus (efisiensi tinggi).
STMStore MultipleMenyimpan isi banyak register ke memori secara berurutan.
PUSHPush to StackMenyimpan data register ke puncak Stack (tumpukan memori).
POPPop from StackMengambil 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.

MnemonicNama InstruksiDeskripsi Fungsi
CMPCompareMembandingkan dua nilai dengan melakukan pengurangan bayangan (hanya memperbarui flag status).
TSTTestMemeriksa apakah bit tertentu aktif (operasi AND tanpa menyimpan hasil, hanya update flag).
BBranchLompat ke alamat instruksi lain (setara dengan GOTO).
BLBranch with LinkLompat ke alamat fungsi dan menyimpan alamat kembali di Link Register (LR). Digunakan untuk pemanggilan subrutin.
BXBranch ExchangeLompat 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.

MnemonicNama InstruksiDeskripsi Fungsi
LSLLogical Shift LeftMenggeser bit ke kiri. Efektif untuk perkalian dengan kelipatan 2.
LSRLogical Shift RightMenggeser bit ke kanan. Efektif untuk pembagian bilangan unsigned dengan kelipatan 2.
ASRArithmetic Shift RightMenggeser bit ke kanan dengan mempertahankan tanda (positif/negatif).
RORRotate RightMemutar bit ke kanan; bit yang keluar dari LSB (Least Significant Bit) akan masuk kembali ke MSB (Most Significant Bit).
MRSMove to Register from StatusMenyalin isi Current Program Status Register (CPSR) ke register umum.
MSRMove to Status from RegisterMenulis nilai baru ke Current Program Status Register (CPSR). Berbahaya jika tidak hati-hati.
SWI / SVCSoftware InterruptMemicu interupsi software. Mekanisme utama untuk melakukan System Call ke kernel.
NOPNo OperationInstruksi kosong. Tidak melakukan apa pun, hanya memakan satu siklus jam (berguna untuk timing).