Apa Itu Syscall?
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 31 dari 45.
Kamu telah menulis instruksi assembly seperti mov dan lea. Instruksi ini berjalan langsung di CPU. Namun, bagaimana jika kamu perlu melakukan sesuatu yang tidak bisa dilakukan CPU sendiri, seperti mencetak ke layar, membaca dari keyboard, atau keluar dari program?
Untuk tugas-tugas ini, kamu memerlukan sistem operasi (Linux, dalam kursus ini).
Apa itu syscall?
syscall (system call) adalah permintaan dari programmu kepada sistem operasi. Dengan syscall, kamu meminta OS melakukan sesuatu untukmu.
Mengapa kamu membutuhkan syscall:
| Tugas | Bisakah CPU melakukannya sendiri? | Perlu syscall? |
|---|---|---|
| Menjumlahkan dua angka | Ya | Tidak |
| Memindahkan data antarregister | Ya | Tidak |
| Mencetak teks ke layar | Tidak | Ya |
| Membaca input keyboard | Tidak | Ya |
| Menghentikan program | Tidak | Ya |
| Membuka file | Tidak | Ya |
Cara kerja syscall:
- Kamu memasukkan nomor syscall ke
rax(memberi tahu OS apa yang kamu inginkan) - Kamu memasukkan argumen ke register lain (
rdi,rsi,rdx, dan sebagainya) - Kamu menjalankan instruksi
syscall
- CPU melompat ke kernel OS
- OS menjalankan permintaan tersebut
- OS mengembalikan kendali ke programmu
Analogi:
Bayangkan syscall seperti menghubungi kantor pemerintah:
| Langkah | Analogi | Dalam assembly |
|---|---|---|
| 1 | Tentukan layanan yang kamu butuhkan | Pilih nomor syscall (masukkan ke rax) |
| 2 | Isi formulir | Masukkan argumen ke dalam register |
| 3 | Ajukan permintaan | Jalankan syscall |
| 4 | Pemerintah memprosesnya | Kernel OS mengerjakannya |
| 5 | Dapatkan hasilnya kembali | Program berlanjut |
Syscall yang akan kamu pelajari dalam kursus ini:
| Syscall | Nomor | Fungsinya | Bab |
|---|---|---|---|
exit | 60 | Mengakhiri program | Bab 4 |
write | 1 | Menampilkan teks di layar | Bab 5 |
Syscall paling penting untuk saat ini: exit
Tanpa exit, programmu akan terus berjalan selamanya atau mengalami crash. Setiap program yang kamu tulis harus diakhiri dengan syscall exit.
mov rax, 60 ; nomor syscall untuk exit
mov rdi, 0 ; kode exit (0 = berhasil)
syscall ; minta OS untuk keluarCoba sendiri
Pelajaran ini tidak memiliki tantangan kode.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
Latihan sendiri: Playground Assembly