El salto de línea importa
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 41 de 45.
Has estado añadiendo 0x0a (newline) al final de tus cadenas. Pero ¿qué ocurre si lo olvidas?
Sin newline:
El texto se imprime, pero el cursor permanece en la misma línea. Cualquier salida futura aparecerá justo al lado.
Ejemplo sin salto de línea:
section .data
first db 'Hello'
firstLen equ $ - first
second db 'World'
secondLen equ $ - second
section .text
mov rax, 1
mov rdi, 1
mov rsi, first
mov rdx, firstLen
syscall
mov rax, 1
mov rdi, 1
mov rsi, second
mov rdx, secondLen
syscallSalida:
HelloWorld
Sin espacio. Sin salto de línea. Todo está pegado.
Con salto de línea:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondSalida:
Hello
World
Cada string se imprime en su propia línea.
Qué hace newline:
| Carácter | ASCII | Efecto |
|---|---|---|
0x0a | 10 | Mueve el cursor al principio de la siguiente línea |
Errores comunes con las nuevas líneas:
| Error | Resultado |
|---|---|
| Sin ninguna nueva línea | El texto se junta todo en una sola línea |
| Nueva línea solo al final de la última cadena | Las cadenas anteriores se juntan, la última pasa a la siguiente línea |
| Nueva línea en medio de una cadena | Saltos de línea en lugares inesperados |
La regla segura:
Añade siempre 0x0a al final de cada cadena que quieras en su propia línea.
Desafío
Se te dan tres cadenas de texto sin saltos de línea. Tu tarea es imprimirlas para que aparezcan en tres líneas separadas.
Las cadenas son:
| Cadena | Valor |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Requisitos:
- Define cada cadena con un salto de línea (
0x0a) al final - Calcula la longitud de cada cadena automáticamente
- Imprime las tres cadenas usando la llamada al sistema write
- Sal de forma limpia con el código 0
Pruébalo tú mismo
section .data
; TODO: Define word1 con el 1er texto listado en las instrucciones y newline
; TODO: Define word2 con el 2do texto listado en las instrucciones y newline
; TODO: Define word3 con el 3er texto listado en las instrucciones y newline
; TODO: Calcula las longitudes de cada string
section .text
global _start
_start:
; TODO: Imprime word1
; TODO: Imprime word2
; TODO: Imprime word3
; TODO: Salir limpiamente section .data
word1 db 'Apple', 0x0a
word1Len equ $ - word1
word2 db 'Banana', 0x0a
word2Len equ $ - word2
word3 db 'Cherry', 0x0a
word3Len equ $ - word3
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, word1
mov rdx, word1Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word2
mov rdx, word2Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word3
mov rdx, word3Len
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