Menu
CoddyTech

Syscall de Salida (60)

Parte de la sección Fundamentos del Journey de Assembly de Coddy. Lección 32 de 45.

La llamada al sistema más importante para cualquier programa es exit. Sin ella, tu programa seguiría ejecutándose para siempre o fallaría al llegar al final de la memoria.

El número de la llamada al sistema exit es 60.

Sintaxis:

mov rax, 60    ; número de syscall para exit
mov rdi, 0     ; código de salida (0 = éxito)
syscall        ; solicita al sistema operativo que termine el programa

¿Qué sucede cuando ejecutas syscall con rax = 60:

  1. La CPU salta al kernel de Linux
  2. El kernel ve: "exit syscall with code 0"
  1. El kernel termina tu programa
  2. El kernel devuelve el control al shell o al sistema operativo

El código de salida 0 significa éxito: el programa terminó sin errores. Los códigos de salida del 1 al 255 indican distintos errores. Puedes elegir cualquier número para señalar qué salió mal.

Por qué son importantes los códigos de salida:

Después de que tu programa termina, el shell (terminal) almacena el código de salida. Puedes comprobarlo con:

./myprogram
echo $?    ; Prints the exit code

Esto es útil para:

  • Scripts que comprueban si un programa se ejecutó correctamente
  • Depuración (códigos distintos para errores distintos)
  • Encadenar programas

Un programa mínimo completo:

section .text
    global _start

_start:
    mov rax, 60    ; llamada al sistema de salida
    mov rdi, 0     ; código de salida 0 (éxito)
    syscall

Este programa no hace nada visible. Simplemente termina correctamente. Pero es un programa válido y completo.

Mencionemos qué son global _start y _start:.

CódigoQué esPor qué lo necesitas
global _startIndica al enlazador dónde empieza tu programaSin él, el enlazador no sabe qué etiqueta es el punto de entrada
_start:Una etiqueta que marca el inicio de tu códigoLa CPU empieza a ejecutar aquí

No necesitas memorizar los detalles. Solo debes saber que cada main.asm debe tener estas dos líneas antes de tu código. Las usarás en todos los programas.

¿Qué ocurre si olvidas la llamada al sistema de salida?

Si no incluyes la llamada al sistema de salida, la CPU seguirá ejecutando los datos basura que haya en la memoria después de tu código. Esto suele provocar un error de segmentación (fallo) o un comportamiento completamente inesperado. Tu programa no terminará correctamente.

Termina siempre tu programa con una llamada al sistema de salida.

challenge icon

Desafío

Añade la llamada al sistema de salida con el código de salida 5.

El código para imprimir el mensaje "Exiting with code 5" ya está proporcionado. Aún no necesitas entenderlo. Se explicará en el capítulo 5.

Tu única tarea es añadir la llamada al sistema de salida al final.

Pruébalo tú mismo

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: Añade la syscall de salida con el código de salida 5
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos

Practica por tu cuenta: Playground de Assembly