Mettere tutto insieme
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 39 di 45.
Hai imparato tutti e quattro gli elementi della syscall write:
| Registro | Cosa contiene | Valore per l'output sullo schermo |
|---|---|---|
rax | Numero della syscall | 1 (write) |
rdi | Descrittore di file | 1 (stdout) |
rsi | Indirizzo del buffer | Indirizzo della tua stringa |
rdx | Numero di byte | Lunghezza della tua stringa |
Ora è il momento di mettere tutto insieme.
Lo schema completo della chiamata di sistema write:
mov rax, 1 ; numero di syscall per write
mov rdi, 1 ; descrittore di file (stdout)
mov rsi, msg ; indirizzo della stringa
mov rdx, msgLen ; numero di byte da stampare
syscall ; chiedi al sistema operativo di stampareUn programma completo funzionante:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallCosa fa questo programma:
| Passaggio | Cosa succede |
|---|---|
| 1 | Stampa "Hello, World!" sullo schermo |
| 2 | Va a capo |
| 3 | Termina correttamente con il codice 0 |
L'ordine è importante:
Devi configurare i registri prima di eseguire syscall. L'ordine delle istruzioni mov non è importante, purché tutti e quattro siano impostati prima di syscall.
Sfida
Scrivi un programma completo che stampi il messaggio "Assembly is fun" seguito da una nuova riga, quindi termini correttamente.
La stringa e la sua lunghezza sono già definite. Devi solo scrivere il codice all'interno di _start:.
Provalo tu
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; TODO: Prepara e richiama la chiamata di sistema write
; Usa rax=1, rdi=1, rsi=msg, rdx=msgLen
; TODO: Termina correttamente con il codice 0
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