Ultima modifica da un moderatore:
Salve community
Oggi voglio postare questa guida
Allora incominciamo subito:
-----------------------------------------
|INDICE: |
-----------------------------------------
| 1) Aprite es1.asm e leggete! |
| 2) Commenti al es1.asm |
| 3) es2.asm con spiegazioni |
-----------------------------------------
Commenti al es1.asm
Cosa dire?
Label.
Innanzi tutto che esistono, come in molto altri linguaggi le label.
Le label qui si fanno grazie ai 2 punti.
Così:
PIPPO:
...
...
...
Semplice!
Ricordate che il programma non funziona se usate Label con nomi riservati cioè con
parole che sono comandi. Questo è un grave errore. Per evitare questo semplicemente
usate parole italiane.
Dato che le label si usano molto spesso, e dato che i comandi possibili sono tanti,
io vi consiglio di usare spesso il carattere _ . Questo carattere è usato spesso
per le label dai programmatori seri. Ma non mettetelo come primo carattere.
ESEMPIO:
ciao_bello:
MODEL
Model è un comando che regola prevalentemente il tipo di programma (nel nostro caso
MASM) Non in tutti i programmi è necessario come non in tutti i programmi funziona
così.
Questo comando funziona così:
-TINY Che vuol dire fai diventare il futuro programma un .COM .Queso è perchè con
l'opzione TINY regolo i segmenti che verranno utilizzati all'interno dello stesso
programma.
-C regolo il tipo di linguaggio. Questo è necessario per certe operazioni. Perchè?
Semplicemente perché certe operazioni vanno regolate fuori dall'assembler. Se vi
sentite sicuri sul C mettere C (come io ho fatto). Se preferite PASCAL mettete
questo. Non cambia nulla in questo programma ma magari in altri di più.
Non posso farvi esempi sull'uso di questa istruzione perchè la sorgente file_1.asm
non ne fa uso. Posso solo dirvi che l'ultimo comando .END sarebbe diventato, se
in PASCAL, END. . Nulla di più.
-NEARSTACK vuol dire che l'intero segmento che il programma utilizzarà sarà preso
dal programma stesso.
-.STACK serve ad evitare errori durante la compilazione. Ai fini del programma non
serve
-.286 serve per dire al compilatore che stiamo usando comandi impostati nel 8088 fino
al 286.Avrei potuto utilizzare tranquillamente quelle dello 8088 senza mettere questo
comando dato che comunque tutti questi comandi funzionano anche nelle macchine
successive.
-.DATA serve a dire le variabili che utilizzarò nel programma
- e infine le direttive .CODE e .STARTUP indicano al compilatore che le istruzioni
iniziano a partire da .CODE e che l'esecuzione del programma deve iniziare a
partire dalla direttiva .STARTUP.
-.EXIT Con questo comando il compilatore inserisce automaticamente i comando:
MOV AH,4Ch
INT 21h
e quindi termina il programma. Questi 2 comandi li abbiamo già visti quindi non
mi soffermo.
XOR DX,DX
Come vi ho detto ora parliamo di questo comando che vi sembrerà inutile.
Questo è posto dopo la label P3:. Se lo eliminate il comando si blocca e dovete
riavviare il computer.
Voi sapete che l'istruzione DIV BX serve a dividere il registro DX:AX e il registro
BX inserendo il resto in DX. Ma bisogna prima azzerare DX altrimenti si blocca il
tutto.
Il registro DX in effetti puo' contenere valori diversi da zero, ma...... al MOMENTO
di eseguire l'istruzione DIV , questa deve azzerare DX, quindi DX DEVE avere un
valore tale che l'istruzione DIV azzeri DX e questo possa contenere il resto.
_________________ Fine del commento del primo programma! _________________
ACCEDERE AD UN DISCHETTO E FORMATTARLO ACCURATAMENTE
Spesso quando si fa una formattazione questa è fatta in modo approssimativo.
Infatti molte volte virus calcellati sono ripartiti tranquillamente provocando
ancora danni.
In questa sezione impareremo ad accedere al disco a livello fisico ( e non logico
come di fatto vi accede il famoso FORMAT A: quando il dischetto e' gia' formattato
a basso livello, e cioe' nella quasi totalita' dei casi, ivi compresi i dischetti
nuovi appena spacchettati).
Quindi facciamo un piano di lavoro:
L'unica cosa che sappiamo fare è usare interrupt del BIOS e quindi useremo queste.
Più avanti, se avrò voglia vi farò riscriverò lo stesso programma, ma stavolta
accedendo direttamente alle porte di I/O, ed escludendo completamente l'ausilio del
BIOS.
Per ora saremo gia' a un discreto grado di comprensione se utilizzeremo le funzioni
del BIOS e ne vedremo i risultati, cambiando addirittura il carattere di FILL-UP
(cioè il carattere che indica che lo spazio e libero), e mettendo perche' no! la prima
lettera di Gaetano, cioe' 1,44 Milioni di G al posto di ÷ (codice ASCII 246) che
e' il carattere di FILL-UP standard per i dischetti. Alla fine bastera' verificare
qualche centinaio di settori (specialmente nei primi cilindri (o le prime testine) e
avremo la garanzia che le routines del BIOS hanno effettivamente formattato a basso
livello il nostro Floppy-Disk.
Quindi faremo:
1) Procuriamoci le informazioni che ci servono, cioè il driver e altre cosucce.
2) Chiediamo conferma all'utente per la formattazione. Lo facciamo attraverso la
richiesta di Y. Se ciò non accade si esce.
3) Proiettiamo una mascherina dello stato di aggiornamento della formattazione.
(La formattazione a basso livello e' abbastanza lunga e un utente impaziente
potrebbe spegnere il computer o attivare un CTRL+ALT+CANC.)
4) Iniziamo la formattazione traccia per traccia (dopo aver definito ogni settore),
e verifichiamo se e' stata eseguita regolarmente. In caso di errore (ripetuto
oltre le 4 volte) diamo il messaggio di errore e il codice corrispondente.
5) Alla fine, prima di saltare alla nostra funzione DISK_VIEW inseriamo nel primo
settore assoluto il BPB (il Blocco dei Parametri del BIOS) che ci consentira' di
potervi accedere (dal BIOS) e anche di poter continuare facilmente a scrivere a
livello fisico (settore per settore) qualunque dato vogliamo.
6) Rendiamo semplice l'uscita dal programma allorche' l'utente preme il tasto ESC
(cod. ASCII 1Bh).
Con questo la guida è conclusa ciao a tutti
Credits Twister
Oggi voglio postare questa guida
Allora incominciamo subito:
-----------------------------------------
|INDICE: |
-----------------------------------------
| 1) Aprite es1.asm e leggete! |
| 2) Commenti al es1.asm |
| 3) es2.asm con spiegazioni |
-----------------------------------------
Commenti al es1.asm
Cosa dire?
Label.
Innanzi tutto che esistono, come in molto altri linguaggi le label.
Le label qui si fanno grazie ai 2 punti.
Così:
PIPPO:
...
...
...
Semplice!
Ricordate che il programma non funziona se usate Label con nomi riservati cioè con
parole che sono comandi. Questo è un grave errore. Per evitare questo semplicemente
usate parole italiane.
Dato che le label si usano molto spesso, e dato che i comandi possibili sono tanti,
io vi consiglio di usare spesso il carattere _ . Questo carattere è usato spesso
per le label dai programmatori seri. Ma non mettetelo come primo carattere.
ESEMPIO:
ciao_bello:
MODEL
Model è un comando che regola prevalentemente il tipo di programma (nel nostro caso
MASM) Non in tutti i programmi è necessario come non in tutti i programmi funziona
così.
Questo comando funziona così:
-TINY Che vuol dire fai diventare il futuro programma un .COM .Queso è perchè con
l'opzione TINY regolo i segmenti che verranno utilizzati all'interno dello stesso
programma.
-C regolo il tipo di linguaggio. Questo è necessario per certe operazioni. Perchè?
Semplicemente perché certe operazioni vanno regolate fuori dall'assembler. Se vi
sentite sicuri sul C mettere C (come io ho fatto). Se preferite PASCAL mettete
questo. Non cambia nulla in questo programma ma magari in altri di più.
Non posso farvi esempi sull'uso di questa istruzione perchè la sorgente file_1.asm
non ne fa uso. Posso solo dirvi che l'ultimo comando .END sarebbe diventato, se
in PASCAL, END. . Nulla di più.
-NEARSTACK vuol dire che l'intero segmento che il programma utilizzarà sarà preso
dal programma stesso.
-.STACK serve ad evitare errori durante la compilazione. Ai fini del programma non
serve
-.286 serve per dire al compilatore che stiamo usando comandi impostati nel 8088 fino
al 286.Avrei potuto utilizzare tranquillamente quelle dello 8088 senza mettere questo
comando dato che comunque tutti questi comandi funzionano anche nelle macchine
successive.
-.DATA serve a dire le variabili che utilizzarò nel programma
- e infine le direttive .CODE e .STARTUP indicano al compilatore che le istruzioni
iniziano a partire da .CODE e che l'esecuzione del programma deve iniziare a
partire dalla direttiva .STARTUP.
-.EXIT Con questo comando il compilatore inserisce automaticamente i comando:
MOV AH,4Ch
INT 21h
e quindi termina il programma. Questi 2 comandi li abbiamo già visti quindi non
mi soffermo.
XOR DX,DX
Come vi ho detto ora parliamo di questo comando che vi sembrerà inutile.
Questo è posto dopo la label P3:. Se lo eliminate il comando si blocca e dovete
riavviare il computer.
Voi sapete che l'istruzione DIV BX serve a dividere il registro DX:AX e il registro
BX inserendo il resto in DX. Ma bisogna prima azzerare DX altrimenti si blocca il
tutto.
Il registro DX in effetti puo' contenere valori diversi da zero, ma...... al MOMENTO
di eseguire l'istruzione DIV , questa deve azzerare DX, quindi DX DEVE avere un
valore tale che l'istruzione DIV azzeri DX e questo possa contenere il resto.
_________________ Fine del commento del primo programma! _________________
ACCEDERE AD UN DISCHETTO E FORMATTARLO ACCURATAMENTE
Spesso quando si fa una formattazione questa è fatta in modo approssimativo.
Infatti molte volte virus calcellati sono ripartiti tranquillamente provocando
ancora danni.
In questa sezione impareremo ad accedere al disco a livello fisico ( e non logico
come di fatto vi accede il famoso FORMAT A: quando il dischetto e' gia' formattato
a basso livello, e cioe' nella quasi totalita' dei casi, ivi compresi i dischetti
nuovi appena spacchettati).
Quindi facciamo un piano di lavoro:
L'unica cosa che sappiamo fare è usare interrupt del BIOS e quindi useremo queste.
Più avanti, se avrò voglia vi farò riscriverò lo stesso programma, ma stavolta
accedendo direttamente alle porte di I/O, ed escludendo completamente l'ausilio del
BIOS.
Per ora saremo gia' a un discreto grado di comprensione se utilizzeremo le funzioni
del BIOS e ne vedremo i risultati, cambiando addirittura il carattere di FILL-UP
(cioè il carattere che indica che lo spazio e libero), e mettendo perche' no! la prima
lettera di Gaetano, cioe' 1,44 Milioni di G al posto di ÷ (codice ASCII 246) che
e' il carattere di FILL-UP standard per i dischetti. Alla fine bastera' verificare
qualche centinaio di settori (specialmente nei primi cilindri (o le prime testine) e
avremo la garanzia che le routines del BIOS hanno effettivamente formattato a basso
livello il nostro Floppy-Disk.
Quindi faremo:
1) Procuriamoci le informazioni che ci servono, cioè il driver e altre cosucce.
2) Chiediamo conferma all'utente per la formattazione. Lo facciamo attraverso la
richiesta di Y. Se ciò non accade si esce.
3) Proiettiamo una mascherina dello stato di aggiornamento della formattazione.
(La formattazione a basso livello e' abbastanza lunga e un utente impaziente
potrebbe spegnere il computer o attivare un CTRL+ALT+CANC.)
4) Iniziamo la formattazione traccia per traccia (dopo aver definito ogni settore),
e verifichiamo se e' stata eseguita regolarmente. In caso di errore (ripetuto
oltre le 4 volte) diamo il messaggio di errore e il codice corrispondente.
5) Alla fine, prima di saltare alla nostra funzione DISK_VIEW inseriamo nel primo
settore assoluto il BPB (il Blocco dei Parametri del BIOS) che ci consentira' di
potervi accedere (dal BIOS) e anche di poter continuare facilmente a scrivere a
livello fisico (settore per settore) qualunque dato vogliamo.
6) Rendiamo semplice l'uscita dal programma allorche' l'utente preme il tasto ESC
(cod. ASCII 1Bh).
Con questo la guida è conclusa ciao a tutti
Credits Twister