Stampare due stringhe
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 40 di 45.
Sai già come stampare una stringa. Ma cosa succede se vuoi stampare due stringhe separate? Per esempio, "Hello " e poi "World!"?
Ti basta chiamare due volte la syscall write, una per ogni stringa.
Come funziona:
; Prima stampa
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall
; Seconda stampa
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscallEsempio:
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
syscallOutput:
Hello
World!
Ogni stringa termina con 0x0a (un carattere di nuova riga), quindi le due stringhe vengono stampate su righe separate.
Perché stampare due stringhe invece di una?
| Motivo | Esempio |
|---|---|
| Riutilizzabilità | Stampa lo stesso saluto con nomi diversi |
| Flessibilità | Stampa messaggi diversi in base alle condizioni |
| Organizzazione | Mantieni messaggi diversi separati in memoria |
Puoi stampare tutte le stringhe che vuoi:
Ripeti semplicemente la chiamata di sistema write per ogni stringa.
Sfida
Ti vengono date due stringhe: partOne con valore 'Good' e partTwo con valore 'bye'. Entrambe hanno già un carattere di nuova riga alla fine.
Scrivi il codice per stampare partOne e poi partTwo, in modo che l'output mostri:
Good
bye
La sezione dati e la syscall di uscita sono già fornite. Devi scrivere solo le due syscall di scrittura.
Provalo tu
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; TODO: Stampa partOne usando la syscall write
; TODO: Stampa partTwo usando la syscall write
mov rax, 60
mov rdi, 0
syscall
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly