Tutorial Assembly convertito in versione NASM

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Tutorial Assembly convertito in versione NASM

Messaggio 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.

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Bookmarkato ;)

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2098
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 6.18.0
Desktop: gnome and lxqt
Distribuzione: Ubuntu 24.04 & FC 41
Località: Darmstadt - Germania

Messaggio da albatros »

Mi pare fatto davvero bene!
E' proprio quello che cercavo per avere qualche base di assembly...

Complimenti e grazie!

Avatar utente
linus.bash
Linux 3.x
Linux 3.x
Messaggi: 976
Iscritto il: ven 10 feb 2006, 12:58
Località: Bologna
Contatta:

Messaggio 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:

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Messaggio 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.

SeNsEi_SaMe
Linux 0.x
Linux 0.x
Messaggi: 29
Iscritto il: lun 8 mag 2006, 10:17
Contatta:

Messaggio 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!

Avatar utente
gnubit
Linux 3.x
Linux 3.x
Messaggi: 751
Iscritto il: lun 17 apr 2006, 0:16
Località: Verona
Contatta:

Messaggio 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.

Avatar utente
balzarini
Linux 0.x
Linux 0.x
Messaggi: 39
Iscritto il: gio 23 mar 2006, 16:40
Località: Varese

Messaggio 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?

Avatar utente
phobos3576
Staff
Staff
Messaggi: 2980
Iscritto il: dom 17 apr 2005, 0:00
Slackware: 13.1
Kernel: 2.6.37-smp
Desktop: KDE 4.5.3

Messaggio 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.

Rispondi