Imprimiendo dos cadenas
Parte de la sección Fundamentos del Journey de Assembly de Coddy. Lección 40 de 45.
Ya sabes cómo imprimir una cadena. Pero ¿qué pasa si quieres imprimir dos cadenas separadas? Por ejemplo, "Hello " y después "World!"?
Simplemente llamas a la llamada al sistema write dos veces, una por cada cadena.
Cómo funciona:
; Primera impresión
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall
; Segunda impresión
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscallEjemplo:
section .data
first db 'Hello ', 0x0a
firstLen equ $-first
second db 'World!', 0x0a
secondLen equ $-second
section .text
global _start
_start:
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
syscall
mov rax, 60
mov rdi, 0
syscallSalida:
Hello World!
¿Por qué imprimir dos cadenas en lugar de una?
| Razón | Ejemplo |
|---|---|
| Reutilización | Imprime el mismo saludo con nombres diferentes |
| Flexibilidad | Imprime mensajes diferentes según las condiciones |
| Organización | Mantén los mensajes diferentes separados en la memoria |
Puedes imprimir tantas cadenas como quieras:
Simplemente repite la llamada al sistema write para cada cadena.
Desafío
Se te dan dos cadenas: partOne con el valor 'Good' y partTwo con el valor 'bye'. Ambas ya tienen un salto de línea al final.
Escribe el código para imprimir partOne y después partTwo, de modo que la salida muestre:
Good
bye
El section de datos y el syscall de salida ya están incluidos. Solo necesitas escribir los dos write syscalls.
Pruébalo tú mismo
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; TODO: Imprime partOne usando la syscall write
; TODO: Imprime partTwo usando la syscall write
mov rax, 60
mov rdi, 0
syscall
Esta 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