Jenis-jenis instruksi dalam bahasa assembly: panduan lengkap

Pembaharuan Terakhir: May 7 2025
  • Bahasa assembly mengatur instruksinya berdasarkan tujuan: transfer, kalkulasi, kontrol aliran, dan banyak lagi.
  • Setiap instruksi terdiri dari opcode dan operan, dengan format berbeda tergantung pada arsitekturnya.
  • Ada beberapa mode pengalamatan untuk mengakses data, seperti langsung, langsung, dan tidak langsung.

assembler Bahasa mesin dan format instruksi

Bahasa assembly telah menjadi salah satu pilar dasar pengembangan perangkat lunak sejak awal komputasi. Meskipun bahasa tingkat tinggi mendominasi saat ini, assembler tetap digunakan secara luas dan relevan dalam lingkungan di mana kontrol perangkat keras, pengoptimalan, atau kendala sumber daya menjadi prioritas.

Dalam artikel ini, kita akan membahas berbagai jenis instruksi bahasa assembly, menganalisis struktur, tujuan, mode pengalamatan, dan bagaimana instruksi tersebut diorganisasikan di berbagai arsitektur. Anda juga akan menemukan contoh, format, dan tinjauan komprehensif yang memungkinkan Anda untuk sepenuhnya memahami logika di balik instruksi-instruksi ini, yang beroperasi sangat erat dengan perangkat keras.

Apa yang dimaksud dengan instruksi dalam bahasa assembly?

Instruksi perakitan adalah perintah yang dapat langsung dipahami oleh CPU (setelah diterjemahkan ke dalam kode mesin oleh program assembler). Setiap instruksi memiliki tujuan spesifik dan biasanya terdiri dari mnemonik yang mewakili operasi dan satu atau lebih operan yang menunjukkan di mana data diambil dan/atau di mana hasilnya disimpan.

Instruksi-instruksi ini sangat bergantung pada arsitektur prosesor, sehingga setiap jenis CPU (baik x86, ARM, MIPS, dan lain-lain) memiliki serangkaian instruksi tersendiri dengan sintaksis dan kemampuan tertentu.

Struktur instruksi

Instruksi biasanya terdiri dari dua bagian:

  • Kode operasi (opcode): Menunjukkan tindakan yang akan dieksekusi, seperti menambahkan, memindahkan data, membandingkan, dan lain-lain.

Operan menyediakan informasi yang diperlukan untuk melakukan operasi dan dapat disimpan dalam register, memori, atau berupa konstanta. Tidak semua instruksi memerlukan operan, dan dalam beberapa kasus, operan mungkin tersirat dalam instruksi atau disimpan dalam register yang telah ditentukan sebelumnya.

Jenis-jenis instruksi dalam bahasa assembly

Bergantung pada fungsionalitas yang dijalankannya dalam suatu program, instruksi bahasa assembly dapat diklasifikasikan ke dalam beberapa kelompok. Yang paling relevan dirinci di bawah ini:

1. Instruksi transfer data

Instruksi-instruksi ini memungkinkan data disalin dari satu lokasi ke lokasi lain tanpa mengubah kontennya di sumber. Instruksi ini sangat penting untuk memindahkan informasi antar register, memori, dan periferal.

  Panduan Lengkap untuk Menerapkan LLM Lokal di Lingkungan Bisnis dan Pribadi

Beberapa instruksi paling umum dalam grup ini adalah:

  • MOV: Menyalin isi satu operan ke operan lainnya. Misalnya, MOV AX, BX salin konten BX ke AX.
  • MOVS / MOVSB ​​​​/ MOVSW: Memindahkan string dari alamat sumber (SI) ke alamat tujuan (DI), mengotomatiskan proses transfer.
  • LODS / LODSB / LODSW: Memuat nilai dari alamat yang ditunjukkan oleh register SI ke dalam akumulator (AL atau AX).
  • MEMBACA: Memuat alamat efektif, bukan nilai. Berguna untuk mendapatkan alamat suatu variabel atau struktur.

2. Petunjuk baterai

Stack adalah struktur LIFO (last in, first out) yang digunakan untuk menyimpan data sementara, meneruskan parameter, atau menyimpan konteks eksekusi.

  • DORONGAN: Menyimpan nilai pada tumpukan, mengurangi penunjuk SP.
  • POP: Mengambil nilai terkini yang disimpan di tumpukan, menambah SP.
  • PUSHF / POPF: Mereka menyimpan dan mengambil status bendera CPU pada tumpukan.

3. Instruksi aritmatika dan logika

Instruksi-instruksi ini memungkinkan perhitungan dan operasi dilakukan pada bit. Instruksi-instruksi ini sangat penting untuk memanipulasi data numerik dan membuat keputusan dalam alur program.

Di antara yang paling banyak digunakan, kami temukan:

  • TAMBAHKAN / SUB: Penjumlahan dan pengurangan.
  • MUL / IMUL: Perkalian biner.
  • DIV / IDIV: Pembagian (bilangan bulat atau bertanda).
  • DAN / ATAU / XOR / TIDAK: Operasi logika bitwise.
  • SHL / SHR / ROL / ROR: Pergeseran dan rotasi bit.

4. Instruksi kontrol aliran

Mereka memungkinkan Anda untuk memodifikasi urutan eksekusi program , dengan memperkenalkan lompatan atau panggilan bersyarat dan tanpa syarat ke instruksi lain.

  • JMP: Melompat ke alamat lain dalam program tanpa syarat.
  • PANGGILAN / RET: Memanggil subroutine dan kembali.
  • JE/JNE/JG/JL/JZ/JNZ: Lompatan bersyarat, dieksekusi jika kondisi tertentu terpenuhi (setelah perbandingan).

5. Instruksi Input/Output (I/O)

Instruksi-instruksi ini memungkinkan komunikasi antara prosesor dan perangkat eksternal. Instruksi-instruksi ini memungkinkan data untuk dibaca dan ditulis ke/dari port (perangkat keras).

  • IN: Membaca data dari port input.
  • DI LUAR: Mengirim data ke port keluaran.

6. Instruksi titik mengambang

Banyak CPU memiliki koprosesor matematika (atau instruksi khusus) yang didedikasikan untuk bekerja dengan bilangan desimal (bilangan titik mengambang). Instruksi ini memungkinkan operasi seperti:

  • Penjumlahan, pengurangan, perkalian dan pembagian bilangan riil.
  • Operasi trigonometri (sinus, kosinus, tangen).
  • Operasi logaritma, eksponensial dan akar.
  Pemrograman Berorientasi Objek dengan PHP: Contoh Lengkap

Instruksi-instruksi ini biasanya sesuai dengan standar IEEE 754 untuk presisi numerik.

Mode pengalamatan

Bagian fundamental dari desain instruksi adalah bagaimana lokasi operan diidentifikasi. Mode pengalamatan menentukan bagaimana CPU mengakses data.

1. Penanganan segera

Data disertakan langsung dalam instruksi. Cara ini cepat, tetapi tidak memungkinkan untuk memodifikasi nilai tanpa mengubah instruksi.

MOV AX, 5

2. Pengalamatan langsung

Alamat memori yang berisi data ditentukan secara eksplisit.

MOV AX, 

3. Pengalamatan tidak langsung

Alamat efektif diperoleh dari isi sebuah record. Sangat fleksibel dan digunakan untuk struktur dan linked list.

MOV AX, 

4. Pengalamatan terindeks

Alamat dihitung dengan menambahkan basis dan indeks (misalnya, untuk menelusuri array). Alamat menggunakan register khusus seperti SI, DI, atau register basis + offset.

MOV AX, 

Format instruksi: berbagai jenis tergantung pada arsitekturnya

Struktur instruksi dapat bervariasi tergantung pada arsitekturnya. Format umum meliputi:

Format 4 arah

Ini mencakup dua operan, lokasi hasil, dan alamat instruksi berikutnya. Saat ini sudah usang karena kompleksitasnya.

Format 3 arah

Ini menentukan dua operan dan alamat tujuan. Ini umum dalam arsitektur RISC modern.

Format 2 arah

Gunakan operand sumber dan operand tujuan (tujuan juga dapat memberikan nilai). Populer pada arsitektur x86 dan CISC lainnya.

Format 1 arah

Hanya satu operand yang ditentukan; operand lainnya diasumsikan sebagai akumulator. Umum ditemukan pada prosesor lama dan sistem sederhana.

Format 0-alamat (berbasis tumpukan)

Operasi ini menggunakan tumpukan (stack) untuk mengambil dan menyimpan operan dan hasil. Sangat efisien untuk mesin berbasis tumpukan, seperti beberapa kalkulator yang dapat diprogram.

Instruksi makro dan pseudo-opcode

Untuk meningkatkan produktivitas, banyak assembler menawarkan instruksi makro , yang memperluas satu baris menjadi beberapa instruksi sebenarnya. Ini berguna untuk menghindari pengulangan pola kompleks atau untuk membuat struktur tingkat tinggi seperti perulangan atau pernyataan kondisional.

Los kode operasi semu Itu adalah instruksi yang diterjemahkan oleh assembler secara internal menjadi rangkaian instruksi nyata. Misalnya, NOP (tidak ada operasi) dapat diterjemahkan sebagai XCHG AX, AX pada CPU x86.

  Django dalam Python: Apa itu, apa fungsinya, dan bagaimana cara memaksimalkannya

Petunjuk Assembler

Direktif ( juga disebut pseudo-operasi ) bukanlah instruksi dalam arti sebenarnya. Direktif berfungsi untuk mengontrol proses perakitan, mendefinisikan data, bagian kode, makro, kondisi kompilasi, dan lain sebagainya.

Contoh umum meliputi:

  • .data / .kode: Mereka menunjukkan bagian data atau kode.
  • .org: Mengatur alamat tempat perakitan akan dimulai.
  • .persamaan: Mendefinisikan konstanta simbolik.

Kasus penggunaan bahasa assembly

Terlepas dari meningkatnya popularitas bahasa pemrograman tingkat tinggi, bahasa assembly tetap menjadi kunci di beberapa bidang:

  • Pengembangan sistem tertanam dan mikrokontroler.
  • Pemrograman driver, bootloader dan BIOS.
  • Pengoptimalan ekstrem dalam aplikasi seperti permainan video atau kriptografi.
  • Rekayasa balik, debugging, dan peretasan tingkat rendah.

Selain itu, pelatihan dalam bahasa assembly masih menempati tempat penting dalam program studi ilmu komputer dan elektronika, karena memberikan pemahaman mendalam tentang cara kerja prosesor, cara penyimpanan dan manipulasi data, serta cara eksekusi instruksi pada tingkat biner.

Memahami semua jenis instruksi perakitan, strukturnya, fungsionalitasnya, dan mode pengalamatannya memberikan dasar yang kuat bagi setiap programmer yang ingin mempelajari pemrograman tingkat rendah atau memahami bagaimana bahasa tingkat tinggi akhirnya diterjemahkan menjadi kode mesin. Meskipun penggunaannya menjadi lebih spesifik, ia tetap menjadi alat penting dalam berbagai area penting pengembangan perangkat lunak dan sistem.

bahasa assembly
Artikel terkait:
Segala Hal tentang Bahasa Assembly: Apa Itu dan Bagaimana Cara Kerjanya