Menu
Coddy logo textTech

Numero di byte (rdx)

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 38 di 45.

Hai detto al sistema operativo dove stampare (rdi) e cosa stampare (rsi). Ora devi dirgli quanti byte stampare.

Il registro per il conteggio dei byte è rdx.

Perché il sistema operativo ha bisogno della lunghezza?

Il sistema operativo non sa dove termina la tua stringa. Senza una lunghezza, continuerebbe a leggere la memoria all'infinito. La lunghezza indica al sistema operativo esattamente quando fermarsi.

Esempio:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = numero di byte da stampare

Cosa succede se la lunghezza è sbagliata?

Se impostiRisultato
Troppo cortaViene stampata solo una parte della stringa
Troppo lungaIl sistema operativo continua a leggere oltre la stringa, nella memoria spazzatura: potrebbe stampare caratteri casuali o bloccarsi
ZeroNon viene stampato nulla

Calcolare automaticamente la lunghezza:

Hai già imparato lo schema $ - label nel capitolo 3:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + nuova riga)

Questo garantisce che la lunghezza sia sempre corretta, anche se cambi la stringa.

Esempio completo:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; chiamata di sistema write
    mov rdi, 1           ; stdout
    mov rsi, msg         ; indirizzo della stringa
    mov rdx, msgLen      ; numero di byte
    syscall
challenge icon

Sfida

Ti viene data una stringa chiamata color con il valore 'Red' seguita da un carattere di nuova riga. È già stata definita una costante chiamata colorLen usando $ - color.

Scrivi la riga di codice che imposta rdx sulla lunghezza della stringa usando la costante colorLen.

Scrivi solo l'istruzione mov per rdx.

Provalo tu

section .text
    global _start

_start:
    ; Il codice dello studente viene eseguito per primo (imposta rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx contiene già la lunghezza (dal codice dello studente)
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly