Menu
Coddy logo textTech

Syscall de Salida (60)

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

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

El número de la syscall exit es 60.

Sintaxis:

mov rax, 60    ; número de syscall para salir
mov rdi, 0     ; código de salida (0 = éxito)
syscall        ; pedir al SO que salga

¿Qué sucede cuando ejecutas <strong>syscall</strong> con <strong>rax = 60</strong>:

  1. La CPU salta al kernel de Linux
  2. El kernel ve: "syscall exit con el código 0"
  1. El kernel termina su programa
  2. El kernel devuelve el control a la shell o al sistema operativo

El código de salida 0 significa éxito — el programa se completó sin errores. Los códigos de salida del 1 al 255 indican diferentes 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 finaliza, la shell (terminal) almacena el código de salida. Puedes comprobarlo con:

./myprogram
echo $?    ; Imprime el código de salida

Esto es útil para:

  • Scripts que comprueban si un programa tuvo éxito
  • Depuración (diferentes códigos para diferentes errores)
  • Encadenar programas entre sí

Un programa mínimo completo:

section .text
    global _start

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

Este programa no hace nada visible; simplemente finaliza con éxito. Pero es un programa válido y completo.

Mencionemos qué son global _start y _start:.

CódigoQué esPor qué lo necesitas
global _startLe indica al enlazador dónde comienza su programaSin esto, el enlazador no sabe qué etiqueta es el punto de entrada
_start:Una etiqueta que marca el comienzo de su códigoLa CPU comienza la ejecución aquí

No es necesario memorizar los detalles. Solo ten en cuenta que cada main.asm debe tener estas dos líneas antes de tu código. Las usarás en cada programa.

¿Qué sucede si olvidas la syscall exit?

Si no incluyes la syscall exit, la CPU continuará ejecutando cualquier dato basura que se encuentre en la memoria después de tu código. Esto suele causar un fallo de segmentación (segmentation fault/crash) o un comportamiento completamente inesperado. Tu programa no terminará de forma limpia.

Siempre finaliza tu programa con una llamada al sistema exit.

challenge icon

Desafío

Añade la syscall exit con el código de salida 5.

El código para imprimir el mensaje "Exiting with code 5" ya se te proporciona. No necesitas entenderlo todavía; se tratará en el Capítulo 5.

Tu tarea es solo añadir la syscall exit 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: Agregar la llamada al sistema 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