|
 |
Il Processore e il Debugger |
DEBUG 15/22
[43 di 60] |
 |
|
Comando L - Carica il codice di un file eseguibile |
|
 | Il comando L
(LOAD, carica) carica in memoria un file
di qualunque tipo; di solito viene dato senza parametri,
dopo aver specificato il nome (e
l'eventuale percorso) con il comando N, già
discusso in
precedenza; il
file viene assunto in memoria rigorosamente a partire dall'indirizzo
CS:0100H.
|
 | Il file caricato in memoria può essere di
qualunque tipo (di testo TXT, di dati
DAT, eseguibile COM o
EXE) sebbene la
potenza di debug sia meglio evidenziata nella gestione dei files di
codice, come gli ultimi 2. |
 | Se, dopo il comando L,
è specificato un indirizzo (offset)
esso rappresenta la locazione a partire dalla quale viene caricato il file;
naturalmente questo ha senso solo se il file è di tipo COM; un file
EXE
viene infatti sempre e comunque rilocato all'indirizzo specificato nel suo
header! |
 | Se l'indirizzo specificato è solo
quello di offset i dati visualizzati si ritengono
appartenenti al segmento CS. |
 | Non dimenticare che, dopo la copia del file è
disponibile un numero a 32 bit che esprime la quantità di bytes caricati in
memoria, lasciato nella coppia di registri BX,CX, rispettivamente parte alte
e parte bassa. |
 |
|
Comando L - Carica i bytes di uno o più settori di un
disco |
|
 | Il comando L
(LOAD, carica) è spesso utile anche per
caricare in memoria uno o più settori
di una memoria di massa (hard
disk o floppy disk). |
 | In questo caso è conveniente specificare l'indirizzo
(offset) in cui travasare i bytes
richiesti, dopo il comando L e prima dei
3 parametri necessari per individuare i settori desiderati:
 | il primo è un numero che indica il
disco da cui prendere i dati: 0 per il drive A, 1 per il drive B, 2
per il drive C, e cosi via... |
 | il secondo è il numero
(logico) del primo settore da caricare dal disco appena
indicato; vale la pena soffermarci un po' su questo numero, sebbene sia
argomento tipico dei dischi:
 | si tratta di
un
numero progressivo
che parte da 0 e
raggiunge il valore dato dal prodotto
(N°Settori/Traccia)(N°Tracce)(N°Lati). |
 |
La numerazione di settori logici
proseguirà in sequenza sulla medesima
traccia (Cylinder) del
lato (Head) corrente e proseguirà (in
verticale) sulla stessa traccia del lato successivo fino all'esaurimento di
tutte le facce disponibili; per riprendere, lato dopo lato, sulla traccia
(cilindro) successiva, verso l'interno del disco. |
 | Questo
modo
logico
di trovare i settori di un disco è tipico del DOS ed è diverso da quello assoluto/fisico usato dal
BIOS e costituito dalla terna di numeri detta sinteticamente CHS (Cylinder,
Head,
Sector). |
 |
Così, per esempio, il primo settore
fisico, il boot record,
identificato dal numero 0,0,1, corrisponde al
settore logico
0. |
 |
La tecnica BIOS (Settore fisico,
basso livello) è senz'altro più utile di quella Dos (Settore
Logico, alto livello); il passaggio dalla prima alla seconda è
facilitato dalla seguente Formula: |
|
N° settore logico = (N°Settore fisico - 1) +
[N°Lato*(N°Settori/Traccia)]+[Traccia*(N°Settori/Traccia)*(N°Lati)] |
 |
La poco chiara numerazione
logica dei Settori da parte del DOS è, per altro, estremamente
efficace perchè consente al Sistema Operativo di accedere a qualunque
disco, indipendentemente dalle sue caratteristiche hardware. |
|
 | il terzo e il numero
di settori da caricare; non è possibile leggere più di 80
settori, pari a 40k di memoria. |
|
 |
La
possibilità di copiare interi settori di un disco è senza dubbio
una situazione di straordinaria potenza. Sebbene non
comporti grandi rischi conviene agire con discrezione,
sicurezza e competenza: ti consiglio di fare
le prove con un dischetto floppy
e di toccare l'HD solo quando 6 ben certo di quello che fai. |
 | Per restare in tema la seguente stringa carica
il boot record di un floppy
disk a partire dall'indirizzo
(offset) 1000H,
nell'unico segmento a disposizione di Debug; tutti i registri di segmento (CS,
DS,
ES, SS) sono infatti
predisposti con lo stesso valore. |
 | La stringa si
legge: carica
(L), a partire dall'indirizzo 1000, dal disco 0
(driver A) il settore n°0 (il primo)
nella quantità 1 (un solo settore,
cioè 512 bytes):
| -l
1000 0 0 1 ; comando per leggere il Boot Record |
|
 | Analogamente per analizzare le 2 copie della
FAT
(File Allocation Table)
di un floppy disk da
1,44M, possiamo dare il comando seguente, che le copia a partire
dall'indirizzo
(offset)
1000H. Notoriamente ciascuna FAT occupa, in questo caso,
9 settori, subito dopo quello del boot record,
analizzato in precedenza; perciò il comando sarà (per la
prima copia di FAT): carica
(L), a partire dall'indirizzo 1000, dal disco 0
(driver A), i settori a partire dal n°1
(il primo) nella quantità 9:
| -l
1000 0 1 9 ; comando per la prima copia della
FAT |
oppure (per la seconda copia di
FAT): carica
(L), a partire dall'indirizzo 1000, dal disco 0
(driver A), i settori a partire dal n°10
(in exa 0AH) nella quantità 9:
| -l 1000 0 A 9 ; comando per la seconda copia della FAT |
|
 | Se vuoi continuare con questo gioco
ricorda che, in un floppy disk da
1,44M, la directory occupa i 14 settori successivi alle 2 copie
della FAT; è facile concludere che il comando da date sarà: carica dal
disco 0 (driver A) i settori a partire
dal n°19 (cioè 1+9+9=19,
in esadecimale 13H) nella quantità
14
(in esadecimale 0EH):
| -l
1000 0 13 E ; comando per leggere la Directory |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|