Pagina 1 di 1

Tutorial Assembly convertito in versione NASM

Inviato: sab 4 feb 2006, 17:29
da phobos3576
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.

Inviato: lun 6 feb 2006, 2:16
da gallows
Bookmarkato ;)

Inviato: lun 1 mag 2006, 11:51
da albatros
Mi pare fatto davvero bene!
E' proprio quello che cercavo per avere qualche base di assembly...

Complimenti e grazie!

Inviato: lun 1 mag 2006, 17:39
da linus.bash
Complimenti! :P


Ottimo lavoro, non sò a che ora ho iniziato a leggere forse 3ore fà e i primi tre capitoli della sezione di base mi sono piaciuti molto...scritti in forma molto comprensibile e con esempi veramente buoni. La migliore guida che abbia mai visto e letto.

Ottimo l'esempio del tetris, hehehehe...

Spero che il sito rimanga on-line per i prossimi mesi, tempo di leggerlo tutto.


PS: c'è possibilità di prelevarlo in forma html, per leggerlo off-line?


Ciao e grazie per la favolosa guida. :wink:

Inviato: mer 24 mag 2006, 2:07
da phobos3576
Rispondo con notevole ritardo in quanto pensavo che il topic fosse ormai OFF.

Per linus.bash, probabilmente tra un po inserirò un bel tar.gz del tutorial Assembly Base nella sezione Downloads.
Il problema è che lo spazio web di xoomer non è molto capiente e il tar.gz occupa circa 1.2 Mb; adesso comunque vedrò cosa fare.

Inviato: mer 24 mag 2006, 9:05
da SeNsEi_SaMe
umh..io non programmo da un bel po' in assembly..ma mi sa che ricomincio dando un'occhiata alla guida...sembra molto completa!!!
complimenti!

Inviato: mer 24 mag 2006, 9:35
da gnubit
Contattami in prv. ti creo un utente sull'ftp del mio server e se prometti di non postare puttanate puoi scaricare e linkare quello che vuoi.

Inviato: mer 24 mag 2006, 11:55
da balzarini
Ottimo lavoro!

Mi sembra che tra i link ti manchi il fantastico helppc:
http://heim.ifi.uio.no/~stanisls/helppc/
che e` veramente utile per capire i sistemi compatibili IBM.

Io l'avevo sfruttato per scrivere colla sintassi del NASM un bootcode
adatto sia per floppy che per hd, un'inizializzazione di modalita` protetta
ed un abbozzo di kernel code che non faceva altro che scarabocchiare
sullo schermo prima di fermarsi...non e` molto, ma gli asm sono scritti in maniera
abbastanza leggibile e magari ti tornano utili per alcune delle tue sezioni incomplete...li vuoi?

Inviato: mer 24 mag 2006, 14:32
da phobos3576
@balzarini. Aggiungerò il link al più presto.
Per quanto riguarda i tuoi listati Assembly, la cosa importante da tenere presente è che i tutorial che sto scrivendo espongono le cose con una certa progressività in modo che chi legge non si trovi davanti a programmi basati su concetti non ancora trattati nei tutorial stessi.
Ciò vale, ad esempio, per la programmazione in modalità protetta (che devo ancora iniziare).
In ogni caso, per chi non vuole attendere, potrei anche inserire i tuoi listati Assembly nel sito; vedi tu se preferisci un link a qualche tuo spazio web (nella sezione Links Utili) oppure un download diretto dei tuoi programmi (nella sezione Downloads).

@gnubit. Prima che arrivasse il tuo messaggio avevo già acquistato uno spazio web su Aruba.it; sono solo 24 € all'anno con tanto di hosting Apache. Comunque, grazie dell'offerta.