Assembly language step by-step programming with linux | Cerca per titolo, autore, parola chiave | ||||||||
Assembly language step by-step programming with linux di Jeff Duntemann. Se avete intenzione di crearvi il vostro sistema operativo personale ( non è quello che state facendo? ) dovrete familiarizzare con la programmazione assembly. E prima di iniziare, dovrete avere un computer x86_64, con installato Linux, come sistema operativo, e NASM come compilatore assembly. Come accade con tutti i manuali relativi ai linguaggi di programmazione, noi inizieremo con il programma "Hello, World!”, il cui codice siete pregati di scrivere manualmente, senza l'ausilio del "copia incolla", in modo che vi resti in mente. Occorre ricordare che Linux, in modalità 64 bit, utilizza una interfaccia alle chiamate di sistema ( ABI, Application Binary Interface ) completamente differente dai sistemi a 32 bit. Abbiamo una chiamata SYSCALL che dice al computer che vogliamo eseguire una chiamata di sistema, i cui parametri sono stati caricati nei registri della CPU. Il valore che troviamo nel registro RAX ( 64 bit ) è il numero della chiamata di sistema che vogliamo effettuare. Una tabella delle chiamate di sistema disponibili e dei loro rispettivi numeri è disponibile nel file "unistd_64.h", che trovate nel filesystem della vostra distribuzione Linux. Nel nostro caso, il numero 1, caricato nel registro RAX, identifica la funzione write(int fd, const void* buf, size_t bytes). Quindi, la chiamata SYSCALL, nel nostro esempio, corrisponde a write(1, message, 13), dove: 1 ( memorizzato nel registro RDI ) è il file descriptor ( FD ) per lo STDOUT, message è il messaggio: "Hello, World!", il cui puntatore è memorizzato nel registro RSI, 13 ( size_t bytes ) è la lunghezza del messaggio, contenuta nel registro RDX.
|
|||||||||
Assembly language step by-step programming with linux | Disclaimer: questo è un link a contenuti ospitati su server esterni. |