L'importanza della nuova riga
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 41 di 45.
Hai aggiunto 0x0a (nuova riga) alla fine delle tue stringhe. Ma cosa succede se te ne dimentichi?
Senza nuova riga:
Il testo viene stampato, ma il cursore rimane sulla stessa riga. Qualsiasi output successivo apparirà subito accanto.
Esempio senza nuova riga:
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
syscallOutput:
HelloWorld
Nessuno spazio. Nessuna nuova riga. Tutto è attaccato.
Con nuova riga:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondOutput:
Hello
World
Ogni stringa viene stampata su una riga propria.
Cosa fa il carattere di nuova riga:
| Carattere | ASCII | Effetto |
|---|---|---|
0x0a | 10 | Sposta il cursore all'inizio della riga successiva |
Errori comuni con le nuove righe:
| Errore | Risultato |
|---|---|
| Nessuna nuova riga | Il testo si unisce su un'unica riga |
| Nuova riga solo alla fine dell'ultima stringa | Le stringhe precedenti si uniscono, l'ultima passa alla riga successiva |
| Nuova riga nel mezzo di una stringa | Interruzioni di riga in punti inaspettati |
La regola sicura:
Aggiungi sempre 0x0a alla fine di ogni stringa che vuoi su una riga a sé.
Sfida
Ti vengono date tre stringhe senza nuove righe. Il tuo compito è stamparle in modo che appaiano su tre righe separate.
Le stringhe sono:
| Stringa | Valore |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Requisiti:
- Definisci ogni stringa con una nuova riga (
0x0a) alla fine - Calcola automaticamente la lunghezza di ogni stringa
- Stampa tutte e tre le stringhe usando la chiamata di sistema write
- Termina correttamente con il codice 0
Provalo tu
section .data
; TODO: Definisci word1 con il 1° testo elencato nelle istruzioni e un carattere di nuova riga
; TODO: Definisci word2 con il 2° testo elencato nelle istruzioni e un carattere di nuova riga
; TODO: Definisci word3 con il 3° testo elencato nelle istruzioni e un carattere di nuova riga
; TODO: Calcola la lunghezza di ogni stringa
section .text
global _start
_start:
; TODO: Stampa word1
; TODO: Stampa word2
; TODO: Stampa word3
; TODO: Termina il programma correttamente
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 corretta3Prima istruzione - MOV
Che cos'è MOV?MOV immediatoMOV da registro a registroMOV da memoria a registroMOV da registro a memoriaLEA - Carica indirizzoMOV con dimensioni diverseEsercitazione: scambia i registriRiepilogo: sfida MOV6Syscall di scrittura
Syscall di scrittura (1)Descrittore di file (rdi)Indirizzo del buffer (rsi)Numero di byte (rdx)Mettere tutto insiemeStampare due stringheL'importanza della nuova rigaRiepilogo: configurazione di writeEsercitati da solo: Playground Assembly