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.

Le has dicho al SO dónde imprimir (rdi) y qué imprimir (rsi). Ahora necesitas decirle cuántos bytes imprimir.

El registro para el conteo de bytes es rdx.

¿Por qué el sistema operativo necesita la longitud?

El sistema operativo no sabe dónde termina tu cadena de texto. Sin una longitud, seguiría leyendo la memoria indefinidamente. 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é sucede si la longitud es incorrecta?

Si establecesResultado
Demasiado cortaSolo se imprime parte de la cadena
Demasiado largaEl sistema operativo sigue leyendo más allá de tu cadena en la memoria basura; puede imprimir caracteres aleatorios o fallar
CeroNo se imprime nada

Cálculo automático de la longitud:

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 asegura que la longitud sea siempre correcta, incluso si cambias la cadena.

Ejemplo completo:

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

section .text
    mov rax, 1           ; llamada al sistema 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' seguido de una nueva línea. Ya se ha definido una constante llamada colorLen utilizando $ - color.

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

Solo escribe 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