Ho questo codice:Cosa succede esattamente quando premo il pulsante Invio in termini di interrupt system_read, assembly?
section .bss
buff resb 1
readfromkeyboard:
mov eax,3 ;specify system read
mov ebx,0 ;specify standard in -> keyboard
mov ecx,buff ;where to store what is read
mov edx,1 ;read 1 byte
int 0x80 ;tell linux to do everything above
mov eax,4 ;sys_write
mov ebx,1 ;Standard output
mov ecx,buff ;what to print
mov edx,1 ;how long to print
int 0x80 ;tell linux to do everything above
che funziona bene.
Quando avvio il processo, il cursore inizierà a lampeggiare nel terminale e io sono libero di immettere caratteri. A questo punto sono libero di inserire tutti i caratteri che voglio, tranne quando premo "ENTER" 1 byte verrà letto e verrà stampato nel terminale.
La mia domanda è, che cosa sta accadendo internamente come io entro personaggi e, come mi ha colpito Immettere .. Così mi ha colpito 'a' nella mia tastiera, e di ' 'c', dove è questo i dati memorizzati in questo momento? Sono già nello spazio di memoria indirizzato da 'buff' nel mio codice? Perché Linux legge quando colpisco Immettere?
@glglgl Grazie per la modifica, ma perché il commento 'oh per favore'? –
Becaus a volte sono un po 'troppo duro nei miei commenti. Mi scuso per quello. – glglgl
Il livello tty esegue il buffering dell'input quando si è in modalità "canonica". Può essere disabilitato tramite chiamate termios. Confronta 'cat' vs' stty -icanon; cat; stty + icanon' – ninjalj