Tutorial Assembly convertito in versione NASM
Inviato: sab 4 feb 2006, 17:29
Diversi anni fa avevo realizzato un tutorial Assembly con MASM e TASM per l'ambiente
DOS/Windows; adesso ho convertito la sezione Assembly Base in versione NASM ed ho
testato il tutto sotto DOSEmu + FreeDOS in modo che sia possibile seguire il tutorial
anche da Linux.
Indubbiamente, si tratta di roba relativamente vecchia in quanto si riferisce alla
cosiddetta "modalità reale 8086"; lo scopo principale del tutorial, però, è quello
di illustrare i concetti che stanno alla base della programmazione in linguaggio
Assembly nelle architetture 80x86.
Se si vuole capire il perché della "strana" struttura delle attuali CPU 80x86, è
necessario prima conoscere l'infermo della segmentazione a 64 Kb delle vecchie CPU
a 16 bit; infatti, tutte le moderne CPU 80x86 a 32 e 64 bit, mantengono la
compatibilità verso la modalità reale a 16 bit delle 8086, e verso la modalità
protetta a 24 bit delle 80286 (compatibilità verso il basso).
L'utilizzo degli emulatori DOS è molto comodo in quanto ci permette di fare
liberamente esperimenti in Assembly senza interferire con il sistema operativo
"sovrastante" (Linux o Windows); infatti, se commettiamo qualche errore, nella
peggiore delle ipotesi DOSEmu (o la Dos Box di WindowsXP) vanno in crash e vengono
automaticamente "killati" dalla modalità protetta di Linux/WindowsXP.
Non altrettanto si può dire di quella schifezza chiamata Windows 95/98 il quale
(come scoprirono a suo tempo alcuni hackers) è una semplice interfaccia grafica
che si appoggia su un vero DOS; ciò significa che un programma Assembly che crasha
la Dos Box, può facilmente crashare anche Win 95/98!
Tutto il materiale (tutorial, strumenti, informazioni) si trova su uno spazio WEB
gratuito di TIN.it; di conseguenza, prima di accedere al tutorial bisogna riuscire
ad accedere al sito. Nonostante TIN.it utilizzi dei server UNIX, gli spazi WEB
gratuiti per gli abbonati sono totalmente incasinati; probabilmente, la larghezza
di banda per l'utente è molto limitata in quanto ci sono seri problemi, sia in
download, sia in upload.
Non parliamo poi del fatto che TIN.it, in ogni pagina del sito, inserisce
automaticamente una sorta di codice di controlo il quale provoca continui
malfunzionamenti!
Per riuscire ad aggiornare il sito, dopo alcuni tentativi falliti con gFTP ho
provato con successo il programmozzo a linea di comando "ftp"; mi sono ritrovato
così ad impartire comandi manuali del tipo "put", "get", "delete", "pwd", "exit",
"disconnect", "bye" e compagnia!
Quindi, provate (se ci riuscite) ad entrare in:
http://xoomer.virgilio.it/ramsoft/
Il mio parere è che questo tutorial sia molto divertente da seguire; è stato scritto
anche in modo molto chiaro e rigoroso. Naturalmente, non escludo la presenza di
qualche castroneria; in tal caso, non esitate a segnalarmela.
Purtroppo, le altre sezioni del sito (Assembly Avanzato e Modalità Protetta) si sono
arenate in quanto comportano un impegno troppo pesante; non escludo comunque che
quando troverò un po di tempo libero, cercherò di scrivere qualche capitolo.
Per quanto riguarda la sezione Win32 Assembly, stendiamo un velo pietoso (soprattutto
per rispetto della grammatica italiana); in ogni caso, nel Capitolo 3 sono presenti
informazioni molto importanti sulla programmazione nella modalità protetta a 32 bit
di Windows, che sono in buona parte valide anche per Linux.
Divertitevi.
Io devo "sparire" per circa una settimana; poi ci risentiamo.
P.S.
Il TASM è un vero mito tra i programmatori Assembly, però, l'ultima versione risale
ormai al 1996; di conseguenza, TASM fornisce un supporto molto limitato del set di
istruzioni delle attuali CPU (solo quale misera istruzione delle primissime CPU
Pentium - quelle a 75 MHZ con tanto di bug nel coprocessore matematico).
Il MASM è un po più recente (2000), però, in perfetto stile Microsoft, è pieno di
pericolosi bug che riguardano, in particolare, gli indirizzamenti a 16 e 32 bit;
corre voce poi che la Microsoft stia pensando di non produrre più ulteriori versioni
di MASM (chissà perché).
NASM per me è stata una sorpresa veramente positiva in quanto è un assembler
potentissimo ed efficientissimo, che non ha nulla da invidiare ai prodotti
commerciali; si tratta di un esempio emblematico del fatto che ormai, i prodotti
open source in molti casi si rivelano nettamente migliori di quelli closed source!
Una delle caratteristiche più potenti di NASM è il suo micidiale preprocessore
attraverso il quale si possono facilmente emulare tutte le direttive avanzate
fornite da MASM e TASM; non parliamo poi del fatto che NASM è in continua evoluzione,
per cui le ultime versioni forniscono persino il supporto per l'intero set di
istruzioni delle CPU 80x86 a 64 bit!
Il tutorial può essere seguito anche sotto l'emulatore DOSBox per Linux; si tratta
però di un emulatore (piuttosto lento) 80386/80486 che va in crash in presenza di
istruzioni 80586 (o di classe superiore)
Se volete eseguire applicazioni "protected mode" come TASM32.EXE, TLINK32.EXE,
TD32.EXE, etc, dovete munirvi della versione 1.3.3 "developers" di DOSEmu, che è
ancora in fase di testing; il mio consiglio è di utilizzare la versione stabile
1.2.2 che, in ogni caso, supporta strumenti come TASM.EXE, TLINK.EXE, TD.EXE,
MASM16, etc.
DOS/Windows; adesso ho convertito la sezione Assembly Base in versione NASM ed ho
testato il tutto sotto DOSEmu + FreeDOS in modo che sia possibile seguire il tutorial
anche da Linux.
Indubbiamente, si tratta di roba relativamente vecchia in quanto si riferisce alla
cosiddetta "modalità reale 8086"; lo scopo principale del tutorial, però, è quello
di illustrare i concetti che stanno alla base della programmazione in linguaggio
Assembly nelle architetture 80x86.
Se si vuole capire il perché della "strana" struttura delle attuali CPU 80x86, è
necessario prima conoscere l'infermo della segmentazione a 64 Kb delle vecchie CPU
a 16 bit; infatti, tutte le moderne CPU 80x86 a 32 e 64 bit, mantengono la
compatibilità verso la modalità reale a 16 bit delle 8086, e verso la modalità
protetta a 24 bit delle 80286 (compatibilità verso il basso).
L'utilizzo degli emulatori DOS è molto comodo in quanto ci permette di fare
liberamente esperimenti in Assembly senza interferire con il sistema operativo
"sovrastante" (Linux o Windows); infatti, se commettiamo qualche errore, nella
peggiore delle ipotesi DOSEmu (o la Dos Box di WindowsXP) vanno in crash e vengono
automaticamente "killati" dalla modalità protetta di Linux/WindowsXP.
Non altrettanto si può dire di quella schifezza chiamata Windows 95/98 il quale
(come scoprirono a suo tempo alcuni hackers) è una semplice interfaccia grafica
che si appoggia su un vero DOS; ciò significa che un programma Assembly che crasha
la Dos Box, può facilmente crashare anche Win 95/98!
Tutto il materiale (tutorial, strumenti, informazioni) si trova su uno spazio WEB
gratuito di TIN.it; di conseguenza, prima di accedere al tutorial bisogna riuscire
ad accedere al sito. Nonostante TIN.it utilizzi dei server UNIX, gli spazi WEB
gratuiti per gli abbonati sono totalmente incasinati; probabilmente, la larghezza
di banda per l'utente è molto limitata in quanto ci sono seri problemi, sia in
download, sia in upload.
Non parliamo poi del fatto che TIN.it, in ogni pagina del sito, inserisce
automaticamente una sorta di codice di controlo il quale provoca continui
malfunzionamenti!
Per riuscire ad aggiornare il sito, dopo alcuni tentativi falliti con gFTP ho
provato con successo il programmozzo a linea di comando "ftp"; mi sono ritrovato
così ad impartire comandi manuali del tipo "put", "get", "delete", "pwd", "exit",
"disconnect", "bye" e compagnia!
Quindi, provate (se ci riuscite) ad entrare in:
http://xoomer.virgilio.it/ramsoft/
Il mio parere è che questo tutorial sia molto divertente da seguire; è stato scritto
anche in modo molto chiaro e rigoroso. Naturalmente, non escludo la presenza di
qualche castroneria; in tal caso, non esitate a segnalarmela.
Purtroppo, le altre sezioni del sito (Assembly Avanzato e Modalità Protetta) si sono
arenate in quanto comportano un impegno troppo pesante; non escludo comunque che
quando troverò un po di tempo libero, cercherò di scrivere qualche capitolo.
Per quanto riguarda la sezione Win32 Assembly, stendiamo un velo pietoso (soprattutto
per rispetto della grammatica italiana); in ogni caso, nel Capitolo 3 sono presenti
informazioni molto importanti sulla programmazione nella modalità protetta a 32 bit
di Windows, che sono in buona parte valide anche per Linux.
Divertitevi.
Io devo "sparire" per circa una settimana; poi ci risentiamo.
P.S.
Il TASM è un vero mito tra i programmatori Assembly, però, l'ultima versione risale
ormai al 1996; di conseguenza, TASM fornisce un supporto molto limitato del set di
istruzioni delle attuali CPU (solo quale misera istruzione delle primissime CPU
Pentium - quelle a 75 MHZ con tanto di bug nel coprocessore matematico).
Il MASM è un po più recente (2000), però, in perfetto stile Microsoft, è pieno di
pericolosi bug che riguardano, in particolare, gli indirizzamenti a 16 e 32 bit;
corre voce poi che la Microsoft stia pensando di non produrre più ulteriori versioni
di MASM (chissà perché).
NASM per me è stata una sorpresa veramente positiva in quanto è un assembler
potentissimo ed efficientissimo, che non ha nulla da invidiare ai prodotti
commerciali; si tratta di un esempio emblematico del fatto che ormai, i prodotti
open source in molti casi si rivelano nettamente migliori di quelli closed source!
Una delle caratteristiche più potenti di NASM è il suo micidiale preprocessore
attraverso il quale si possono facilmente emulare tutte le direttive avanzate
fornite da MASM e TASM; non parliamo poi del fatto che NASM è in continua evoluzione,
per cui le ultime versioni forniscono persino il supporto per l'intero set di
istruzioni delle CPU 80x86 a 64 bit!
Il tutorial può essere seguito anche sotto l'emulatore DOSBox per Linux; si tratta
però di un emulatore (piuttosto lento) 80386/80486 che va in crash in presenza di
istruzioni 80586 (o di classe superiore)
Se volete eseguire applicazioni "protected mode" come TASM32.EXE, TLINK32.EXE,
TD32.EXE, etc, dovete munirvi della versione 1.3.3 "developers" di DOSEmu, che è
ancora in fase di testing; il mio consiglio è di utilizzare la versione stabile
1.2.2 che, in ogni caso, supporta strumenti come TASM.EXE, TLINK.EXE, TD.EXE,
MASM16, etc.