Menu
Coddy logo textTech

Cantidad de bytes (rdx)

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

Ya le has indicado al sistema operativo dónde imprimir (rdi) y qué imprimir (rsi). Ahora debes indicarle cuántos bytes imprimir.

El registro para el recuento de bytes es rdx.

¿Por qué el sistema operativo necesita la longitud?

El sistema operativo no sabe dónde termina tu cadena. Sin una longitud, seguiría leyendo la memoria para siempre. La longitud le indica al sistema operativo exactamente cuándo detenerse.

Ejemplo:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = número de bytes a imprimir

¿Qué ocurre si la longitud es incorrecta?

Si establecesResultado
Demasiado cortaSolo se imprime parte de la cadena
Demasiado largaEl sistema operativo continúa leyendo después de tu cadena, en memoria basura: puede imprimir caracteres aleatorios o bloquearse
CeroNo se imprime nada

Calcular la longitud automáticamente:

Ya aprendiste el patrón $ - label en el capítulo 3:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + salto de línea)

Esto garantiza que la longitud siempre sea correcta, incluso si cambias la cadena.

Ejemplo completo:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; syscall write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; dirección de la cadena
    mov rdx, msgLen      ; número de bytes
    syscall
challenge icon

Desafío

Se te proporciona una cadena llamada color con el valor 'Red' seguida de una nueva línea. Ya se ha definido una constante llamada colorLen usando $ - color.

Escribe la línea de código que establece rdx en la longitud de la cadena usando la constante colorLen.

Escribe únicamente la instrucción mov para rdx.

Pruébalo tú mismo

section .text
    global _start

_start:
    ; El código del estudiante se ejecuta primero (establece rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx ya tiene la longitud (del código del estudiante)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
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