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 estableces | Resultado |
|---|---|
| Demasiado corta | Solo se imprime parte de la cadena |
| Demasiado larga | El sistema operativo sigue leyendo más allá de tu cadena en la memoria basura; puede imprimir caracteres aleatorios o fallar |
| Cero | No 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
syscallDesafí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
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-64