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 estableces | Resultado |
|---|---|
| Demasiado corta | Solo se imprime parte de la cadena |
| Demasiado larga | El sistema operativo continúa leyendo después de tu cadena, en memoria basura: puede imprimir caracteres aleatorios o bloquearse |
| Cero | No 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
syscallDesafí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
syscallEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-64Practica por tu cuenta: Playground de Assembly