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.

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 dirilis 29 Juni 2026 — penerus 3.01 (Okt 2025) dan lompatan besar dari 2.16 yang lama. Sorotannya:
Verifikasi versi kalian:
nasm -vJika masih 2.16.x dari repository LTS, pertimbangkan upgrade dari nasm.us untuk fitur instruksi terbaru — meskipun untuk belajar, 2.16+ sudah cukup.
| Ekstensi | Makna | Implikasi |
|---|---|---|
| APX | Advanced Performance Extensions (Intel) | Register tujuan tambahan (eflags opsional), 3-operan add/sub/dst, encodings baru |
| AVX10 | Menyatukan AVX-512 untuk semua level | Instruksi 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:
lscpu | grep -E "apx|avx10" # cari flag di Flags
grep -m1 flags /proc/cpuinfo | tr ' ' '\n' | grep -E "apx|avx10|avx512f"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:
| Encoding | Digunakan | Ciri opcode |
|---|---|---|
| Legacy | instruksi dasar, SSE | 1–3 byte (misal 48 01) |
| VEX | AVX (vaddps, vmovapd) | Prefix C4/C5 + 2–3 byte |
| EVEX | AVX-512 (vaddps zmm) | Prefix 62 + 4 byte + mask |
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 C1Mengapa 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).
Selain NASM dan GAS, ada assembler ketiga yang semakin dominan: assembler terintegrasi Clang (dan LLVM's llvm-mc). Keunggulannya:
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.ollvm-objdump adalah rekanan objdump:
llvm-objdump -d -x86-asm-syntax=intel hello.oKeuntungan 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 (godbolt.org, Compiler Explorer) adalah alat terpenting untuk belajar assembly modern:
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:
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:
retBandingkan 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.
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 -1Pada episode 20 ini, kalian telah diperbarui ke lanskap toolchain 2026.
Inti yang harus dibawa pulang:
C4/C5) vs EVEX (62) — prefix menandai generasi instruksi.llvm-objdump untuk multi-target yang konsisten.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".