L'importanza della nuova riga
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 41 di 45.
Hai aggiunto 0x0a (carattere di 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 un a capo:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondOutput:
Hello
WorldOgni 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 tutto su un'unica riga |
| Nuova riga solo alla fine dell'ultima stringa | Tutte le stringhe si uniscono su un'unica riga, poi il cursore passa alla riga successiva |
| Nuova riga nel mezzo di una stringa | Le righe si interrompono in punti imprevisti |
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 caratteri di nuova riga. Il tuo compito è stamparle in modo che compaiano su tre righe separate.
Le stringhe sono:
| Stringa | Valore |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Requisiti:
- Definisci ogni stringa con un carattere di 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 codice 0
Provalo tu
section .data
; TODO: Definisci word1 con il 1° testo indicato nelle istruzioni e un carattere di nuova riga
; TODO: Definisci word2 con il 2° testo indicato nelle istruzioni e un carattere di nuova riga
; TODO: Definisci word3 con il 3° testo indicato 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 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