Menu
CoddyTech

Syscall Keluar (60)

Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 32 dari 45.

Syscall paling penting untuk program apa pun adalah exit. Tanpanya, programmu akan terus berjalan selamanya atau crash saat mencapai akhir memori.

Nomor syscall exit adalah 60.

Sintaks:

mov rax, 60    ; nomor syscall untuk keluar
mov rdi, 0     ; kode keluar (0 = berhasil)
syscall        ; minta OS untuk keluar

Apa yang terjadi saat kamu menjalankan syscall dengan rax = 60:

  1. CPU melompat ke kernel Linux
  2. Kernel melihat: "exit syscall with code 0"
  1. Kernel menghentikan programmu
  2. Kernel mengembalikan kendali ke shell atau sistem operasi

Kode keluar 0 berarti berhasil: program selesai tanpa error. Kode keluar 1 hingga 255 menunjukkan berbagai error. Kamu dapat memilih angka berapa pun untuk menandakan apa yang salah.

Mengapa kode keluar penting:

Setelah programmu keluar, shell (terminal) menyimpan kode keluar. Kamu bisa memeriksanya dengan:

./myprogram
echo $?    ; Prints the exit code

Ini berguna untuk:

  • Skrip yang memeriksa apakah program berhasil
  • Debug (kode berbeda untuk error yang berbeda)
  • Menghubungkan program satu sama lain

Program minimal yang lengkap:

section .text
    global _start

_start:
    mov rax, 60    ; syscall untuk keluar
    mov rdi, 0     ; kode keluar 0 (berhasil)
    syscall

Program ini tidak melakukan apa pun yang terlihat. Program ini hanya keluar dengan sukses. Namun, ini adalah program yang valid dan lengkap.

Mari kita bahas apa itu global _start dan _start:.

KodeApa ituAlasan kamu membutuhkannya
global _startMemberi tahu linker tempat programmu dimulaiTanpanya, linker tidak tahu label mana yang menjadi titik masuk
_start:Label yang menandai awal kodemuCPU mulai menjalankan kode di sini

Kamu tidak perlu menghafal detailnya. Cukup ketahui bahwa setiap main.asm harus memiliki dua baris ini sebelum kodemu. Kamu akan menggunakannya di setiap program.

Apa yang terjadi jika kamu lupa syscall exit?

Jika kamu tidak menyertakan syscall exit, CPU akan terus menjalankan data sampah apa pun yang kebetulan berada di memori setelah kodemu. Hal ini biasanya menyebabkan segmentation fault (crash) atau perilaku yang sama sekali tidak terduga. Programmu tidak akan berakhir dengan benar.

Selalu akhiri programmu dengan syscall keluar.

challenge icon

Tantangan

Tambahkan syscall exit dengan kode keluar 5.

Kode untuk mencetak pesan "Exiting with code 5" sudah disediakan untukmu. Kamu belum perlu memahaminya. Materi ini akan dibahas di Bab 5.

Tugasmu hanya menambahkan syscall exit di bagian akhir.

Coba sendiri

section .data
    msg db 'Exiting with code 5', 0x0a
    msgLen equ $ - msg

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msgLen
    syscall

; TODO: Tambahkan syscall exit dengan kode keluar 5
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground Assembly