Belajar Assembly - NASM 3.02 & Toolchain Terbaru
Episode 20 of 23

Belajar Assembly - NASM 3.02 & Toolchain Terbaru

Update ke toolchain assembly terbaru 2026: NASM 3.02 dengan dukungan instruksi modern termasuk APX/AVX10 eksperimental, assembler terintegrasi LLVM/Clang dan llvm-objdump, serta Godbolt (Compiler Explorer) untuk membaca assembly hasil compiler, termasuk pemahaman encoding VEX/EVEX dan instruksi terbaru x86.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Dunia assembly tidak pernah berhenti: CPU baru membawa instruksi baru, dan toolchain pun ikut diperbarui. Episode 20 membawa kalian ke kondisi toolchain per 2026 — NASM 3.02, LLVM integrated assembler, dan Godbolt — plus pemahaman encoding VEX/EVEX yang membuat kalian tidak bingung saat melihat opcode panjang di objdump.

Mengapa penting? Dua alasan. Pertama, kalian harus tahu kemampuan assembler yang kalian pakai agar tidak menulis instruksi yang ditolak atau menghasilkan encoding boros. Kedua, Godbolt adalah guru terbaik untuk belajar assembly: kalian menulis C, melihat hasil kompilasi secara instan, dan membandingkan compiler — cara tercepat memvalidasi semua yang kalian pelajari di episode 4, 7, 12, dan 18.

NASM 3.02: Apa yang Baru

NASM 3.02 dirilis 29 Juni 2026 — penerus 3.01 (Okt 2025) dan lompatan besar dari 2.16 yang lama. Sorotannya:

  • Instruksi terbaru: dukungan penuh untuk instruksi CPU 2025-2026, termasuk ekstensi APX (Advanced Performance Extensions) dan AVX10 — dengan status eksperimental untuk beberapa encoding yang belum final.
  • Perbaikan pada ELF generation, makro preprocessor, dan kinerja assembling file besar.
  • Konsistensi dengan ekosistem binutils dan LLVM untuk instruksi baru.

Verifikasi versi kalian:

Cek versi NASM
nasm -v

Jika masih 2.16.x dari repository LTS, pertimbangkan upgrade dari nasm.us untuk fitur instruksi terbaru — meskipun untuk belajar, 2.16+ sudah cukup.

APX dan AVX10: Instruksi Masa Depan

EkstensiMaknaImplikasi
APXAdvanced Performance Extensions (Intel)Register tujuan tambahan (eflags opsional), 3-operan add/sub/dst, encodings baru
AVX10Menyatukan AVX-512 untuk semua levelInstruksi AVX-512 tersedia di CPU konsumen non-server

Keduanya memperluas model register dan encoding yang kita pelajari di episode 12. Pentingnya bagi kalian: jangan gunakan instruksi yang CPU target tidak dukung. NASM akan tetap meng-assemble — CPU yang tidak paham encoding akan melempar #UD (invalid opcode exception). Selalu cek dukungan dengan cpuid atau lscpu:

Cek dukungan CPU
lscpu | grep -E "apx|avx10"    # cari flag di Flags
grep -m1 flags /proc/cpuinfo | tr ' ' '\n' | grep -E "apx|avx10|avx512f"

Encoding VEX dan EVEX: Membaca Opcode Panjang

Di episode 16, kalian melihat opcode pendek seperti 48 b8 untuk movabs. Instruksi SIMD modern memakai encoding yang lebih panjang — inilah sumber "byte aneh" di objdump:

EncodingDigunakanCiri opcode
Legacyinstruksi dasar, SSE1–3 byte (misal 48 01)
VEXAVX (vaddps, vmovapd)Prefix C4/C5 + 2–3 byte
EVEXAVX-512 (vaddps zmm)Prefix 62 + 4 byte + mask
Tiga encoding, satu operasi
addps xmm0, xmm1        ; legacy:  0F 58 C1
vaddps xmm0, xmm0, xmm1 ; VEX:     C5 F0 58 C1
vaddps zmm0, zmm0, zmm1 ; EVEX:    62 F1 7C 48 58 C1

Mengapa encoding berbeda? Karena setiap generasi menambahkan field baru (3 operand VEX, mask/embed EVEX) yang tidak muat di format lama. Kalian tidak perlu menghafalnya — cukup tahu bahwa prefix C4/C5 = VEX dan 62 = EVEX saat membaca disassembly, dan bahwa instruksi baru umumnya memerlukan encoding terbaru (dan CPU yang mendukungnya).

LLVM/Clang Integrated Assembler

Selain NASM dan GAS, ada assembler ketiga yang semakin dominan: assembler terintegrasi Clang (dan LLVM's llvm-mc). Keunggulannya:

  • Satu toolchain untuk banyak target (x86, ARM64, RISC-V) — persis yang kita lihat di episode 15.
  • Menghasilkan object file yang kompatibel dengan linker GNU.
Assemble dengan Clang
clang -c hello_att.s -o hello.o      # sintaks AT&T (GAS-style)
clang -c -x assembler -fno-integrated-as -c hello_att.s -o hello.o  # fallback as
clang -target aarch64-linux-gnu -c arm64.s -o arm64.o

llvm-objdump adalah rekanan objdump:

llvm-objdump
llvm-objdump -d -x86-asm-syntax=intel hello.o

Keuntungan llvm-objdump: output konsisten lintas arsitektur — sangat membantu saat berpindah antara x86, ARM64, dan RISC-V.

Tip

Clang menerima sintaks Intel juga dengan flag -masm=intel (untuk inline asm) dan mendukung --x86-asm-syntax=intel di llvm-mc. Ini membuat LLVM menjadi jembatan nyaman antara dua dialek yang kita pelajari di episode 4.

Godbolt: Membaca Pikiran Compiler

Godbolt (godbolt.org, Compiler Explorer) adalah alat terpenting untuk belajar assembly modern:

  1. Tulis C di panel kiri.
  2. Panel kanan menampilkan assembly yang dihasilkan secara live.
  3. Warna menyorot pemetaan baris C ↔ instruksi.
CUji di Godbolt
int sum(int* arr, int n) {
    int total = 0;
    for (int i = 0; i < n; i++)
        total += arr[i];
    return total;
}

Dengan x86-64 gcc -O2, kalian akan melihat sesuatu seperti:

Output gcc -O2 (Godbolt)
sum(int*, int):
        xor     eax, eax
        test    esi, esi
        jle     .L1
        lea     edx, [rsi-1]
        lea     rax, [rdi+rdx*4]
        lea     rdx, [rdi+4]
.L3:
        add     eax, DWORD PTR [rdx]
        add     rdx, 4
        cmp     rdx, rax
        jne     .L3
.L1:
        ret

Bandingkan dengan -O0 — perbedaan prologue, register allocation, dan loop yang berubah drastis. Ini pelajaran nyata dari episode 18: compiler sangat pintar, dan kalian bisa melihat persis caranya.

Important

Godbolt adalah compiler, bukan assembler: ia mengompilasi bahasa tingkat tinggi (C/C++/Rust) ke assembly. Untuk menulis assembly murni, tetap pakai NASM/GAS/Clang. Gunakan Godbolt untuk memahami apa yang compiler lakukan — lalu tiru polanya bila kalian menulis assembly tangan.

Checklist Toolchain 2026

Verifikasi toolchain lengkap
nasm -v                          # ≥ 2.16, ideal 3.02
clang --version                  # LLVM 18+ (integrated asm)
as --version | head -1
ld --version | head -1
gdb --version | head -1
objdump --version | head -1
llvm-objdump --version | head -1

Penutup

Pada episode 20 ini, kalian telah diperbarui ke lanskap toolchain 2026.

Inti yang harus dibawa pulang:

  • NASM 3.02 (Jun 2026): instruksi terbaru termasuk APX/AVX10 eksperimental — verifikasi dukungan CPU dulu.
  • Encoding: legacy vs VEX (C4/C5) vs EVEX (62) — prefix menandai generasi instruksi.
  • LLVM integrated assembler + llvm-objdump untuk multi-target yang konsisten.
  • Godbolt adalah cara tercepat belajar pola assembly hasil compiler.
  • Jangan pernah menulis instruksi yang CPU target tidak dukung.

Di episode 21 selanjutnya, kalian membawa assembly ke level paling rendah: kernel, bootloader & embedded — alur boot dari BIOS/UEFI ke long mode, bootloader Multiboot/GRUB, interrupt handler, pengenalan bagian assembly di kernel Linux (arch/x86/), serta bare-metal programming ARM Cortex-M dan RISC-V MCU. Inilah puncak "berbicara dengan mesin".