Jalur Assembly mengajarkan pemrograman tingkat mesin pada arsitektur x86-64 dan RISC-V secara langsung di terminal. Register, stack, dan konvensi pemanggilan tidak hanya dibahas secara konsep, melainkan diamati melalui gdb, objdump, dan strace pada program nyata. Materinya mencakup kedua sintaks utama, System V AMD64 ABI, SIMD hingga AVX2, system call Linux, ISA kedua RISC-V, dan benchmark terhadap C. Prasyarat lingkungannya berupa Linux x86-64 dengan NASM, GNU binutils, gdb, strace, dan gcc, serta qemu-riscv64 untuk modul RISC-V.
Assembly
Jalur assembly x86-64 dan RISC-V dari register pertama sampai benchmark terhadap C, dengan setiap konsep diamati langsung di debugger dan perkakas analisis.
0/0 selesai
Modul pembuka: peran assembly dalam pekerjaan nyata, penyiapan toolchain, dan program pertama pada dua sintaks.
- Mengapa assembly pentingPeran assembly pada pekerjaan performa, debugging tingkat mesin, dan reverse engineering beserta batasannya.
- Penyiapan toolchainMemasang dan memeriksa NASM, GNU as, ld, dan gdb, lalu memverifikasi setiap perkakas dengan perintah versinya.
- Program pertama, dua sintaksProgram write dan exit pertama yang ditulis berdampingan pada sintaks Intel dengan NASM dan AT&T dengan GNU as.
Modul fondasi mesin: enam belas register serbaguna, bentuk operan MOV, LEA, dan pembaruan flag oleh aritmetika.
- Berkas register x86-64Enam belas register serbaguna 64-bit, ukuran 32/16/8-bit-nya, dan peran khusus rsp serta rbp.
- MOV dan bentuk operanTiga bentuk operan MOV, yaitu immediate, register, dan memori, beserta batasan ukurannya.
- LEA sebagai kalkulator alamatMekanisme alamat efektif basis ditambah indeks dikalikan skala ditambah displacement dan penggunaannya sebagai aritmetika.
- Aritmetika dan flagCara add, sub, dan cmp memperbarui ZF, CF, SF, dan OF beserta pembacaannya.
Modul alur kendali: percabangan atas flag, perulangan manual, stack, serta pemanggilan dan pengembalian prosedur.
- Jump dan cabang bersyaratPercabangan berdasarkan kombinasi flag individual dengan je, jne, jl, dan sejenisnya.
- Perulangan secara manualPerulangan yang dibangun dari label, perbandingan, dan jump mundur tanpa instruksi loop.
- StackPerilaku push dan pop, pertumbuhan stack ke bawah melalui rsp, dan penyelarasan 16 byte pada titik masuk.
- call dan retAlamat kembali yang didorong call dan ditarik ret serta perpindahan kendali bersarang.
Modul antarmuka fungsi: kontrak System V AMD64, pembagian register, stack frame, dan konvensi Microsoft x64.
- System V AMD64 ABIKontrak pemanggilan fungsi Linux: register argumen, balikan, register yang dipertahankan, dan stack.
- Register argumen dan balikanrdi, rsi, rdx, rcx, r8, dan r9 untuk enam argumen pertama serta rax sebagai register balikan.
- Register caller-saved dan callee-savedRegister mana yang bertahan melewati sebuah call dan mana yang harus diselamatkan sebelum ditimpa.
- Stack frame dan penyelarasanProlog dan epilog berbasis rbp, penyelarasan stack 16 byte sebelum call, dan akibat melanggarnya.
- Konvensi Microsoft x64Perbedaan Windows: rcx, rdx, r8, dan r9 untuk argumen, shadow space 32 byte, dan tanpa red zone.
Modul memori: mode pengalamatan lengkap, direktif data, array dengan aritmetika pointer, dan tata letak struct.
- Mode pengalamatanPola pengalamatan basis ditambah indeks dikalikan skala ditambah displacement pada bentuknya yang lengkap.
- Direktif dataDefinisi data dengan db, dw, dd, dan dq, pemesanan ruang dengan times dan resb, serta konstanta equ.
- Array dan aritmetika pointerPenelusuran array menggunakan pengalamatan indeks berskala dan perhitungan offset elemennya.
- Struct, offset, dan penyelarasanTata letak field struct, padding penyelarasan, dan akses field secara manual dengan offset tetap.
Modul organisasi program: semantik section, simbol dan relokasi, pengalamatan relatif RIP, dan penautan dengan ld.
- Section programSemantik .text, .data, .rodata, dan .bss beserta izin baca-tulis-eksekusi yang menyertai masing-masing.
- Simbol dan relokasiLabel lokal dan global, tabel simbol, dan relokasi yang diselesaikan lintas berkas objek.
- Pengalamatan relatif RIPReferensi data relatif terhadap RIP sebagai dasar kode bebas posisi dan persamaannya dengan label.
- Penautan dengan ldBerkas objek, titik masuk _start, penautan beberapa berkas, dan executable statik yang dihasilkan.
Modul SIMD: register xmm dan ymm, aritmetika SSE hingga AVX2, serta penyelarasan datanya, semuanya terukur.
- Register xmm dan instruksi moveRegister xmm 128-bit dengan lane internalnya serta pasangan movaps dan movups.
- Aritmetika SSEOperasi packed integer dan floating point untuk empat nilai sekaligus pada register xmm.
- Bentuk tiga operan AVXPrefiks v dan encoding tiga operan non-destruktif AVX yang memisahkan sumber dan tujuan.
- AVX2 dan register ymmRegister ymm 256-bit, operasi delapan lane, dan instruksi gather untuk pengumpulan data tak berurutan.
- Penyelarasan dan akses tak selarasFault akses tak selaras, arahan penyelarasan data, dan pertimbangan memilih movups.
Modul antarmuka kernel: nomor syscall dan register argumennya, file descriptor, error mentah, dan buffer input.
- Antarmuka syscall LinuxNomor syscall pada rax, argumen pada register, instruksi syscall, dan daftar rujukannya.
- Dasar file descriptoropen, read, write, dan close pada level mentah beserta nilai balik descriptor-nya.
- Error syscall mentahKode errno negatif yang dikembalikan dalam rax dan cara membedakannya dari nilai balik normal.
- Membangun input dengan bufferBuffer baca yang dapat digunakan kembali di atas syscall mentah sampai data terbaca penuh.
Modul ISA kedua: filosofi RISC-V, register dan encoding, pola load-store, cabang tanpa flag, dan ABI-nya.
- Filosofi RISC-VISA terbuka dengan ekstensi modular dan desain basis minimal RV64I beserta implikasinya.
- Register dan format RV64x0 hingga x31 beserta enam format encoding R, I, S, B, U, dan J.
- Aritmetika load-storePola aritmetika hanya antar register dan akses memori hanya melalui load dan store.
- Cabang tanpa flagPasangan compare-and-branch yang membandingkan langsung tanpa register flag, beserta pseudo-instruksinya.
- ABI RISC-VArgumen a0 hingga a7, alamat kembali ra, pointer stack sp, dan disiplin callee-saved-nya.
Modul analisis: membaca keluaran assembler dan compiler, menelusuri program di gdb dan strace, serta inline assembly.
- objdump dan Compiler ExplorerMembaca keluaran assembler dan compiler nyata melalui objdump lokal dan Compiler Explorer daring.
- gdb pada assemblyBreakpoint pada label, inspeksi register dan memori, serta langkah per instruksi di gdb.
- Visibilitas straceMenelusuri setiap syscall yang dijalankan sebuah executable beserta argumen dan nilai baliknya.
- Inline assembly dalam CGCC extended asm dengan templat, constraint, dan clobber untuk menyisipkan assembly dalam C.
Modul penutup: memilih target optimasi yang realistis dan membandingkannya dengan C secara terukur dan jujur.
- Pemilihan targetKriteria memilih target di antara hashing, parsing, dan rutin penyalinan serta definisi keberhasilannya.
- Benchmark terhadap CMetodologi benchmark yang adil terhadap C yang dioptimalkan dan pelaporan hasilnya secara jujur.