|
 |
La
Tabella dei Vettori |
SCHEDA n° 04 [
3
di 15] |
 |
|
 | La Tabella dei
Vettori d'Interruzione può essere analizzata in ogni momento con
qualunque editor di memoria, per esempio con il comando
D del Debug; in questo
caso nella shell DOS che ci ospita
verrebbe visualizzato un testo simile a questo:
C:\ARCH-LAB\SITO>debug
Microsoft (R) Symbolic Debug Utility Version 4.00
Copyright (C) Microsoft Corp 1984, 1985. All rights reserved.
Processor is [80286]
-d 0000:0000
0000:0000 68
10 A7
00 8B 01 70 00-16 00 B1 03 8B 01 70
00 h.'...p...1...p.
0000:0010 8B 01 70 00 B9 06 12 02-40
07 12 02 FF 03 12 02 ..p.9...@.......
0000:0020 46 07 12 02 EC 06 92 0E-3A
00 B1 03 54 00 B1 03 F...l...:.1.T.1.
0000:0030 6E 00 B1 03 88 00 B1 03-A2
00 B1 03 FF 03 12 02 n.1...1.".1.....
0000:0040 A9 08 12 02 A4 09 12 02-AA
09 12 02 5D 04 12 02 )...$...*...]...
0000:0050 B0 09 12 02 0D 02 ED 02-25
6A A3 12 8B 05 12 02 0.....m.%j#.....
0000:0060 0E 0C 12 02 14 0C 12 02-1F
0C 12 02 AD 06 12 02 ............-...
0000:0070 AD 06 12 02 A4 F0 00 F0-37
05 12 02 90 35 00 C0 -...$p.p7....5.@ |
|
 | E' chiaro che, essendo la Tabella una
struttura dinamica, dipendente dal contesto
(cioè dalla versione del
BIOS e del sistema
operativo presente sul computer), può succedere che i
valori indicati nella figura
possano essere diversi, a casa tua. |
 | In ogni caso i 128
bytes mostrati sono un buon esempio di dati da
interpretare; già la traduzione Ascii proposta sulla destra
mostra l'assurdità di cercare di tradurre il codice macchina in testo... Noi
sappiamo che si tratta di indirizzi,
per cui vediamo come il comando
dw
del potente Debugger
SymDeb (di proprietà della Microsoft)
mostra le medesime informazioni, visualizzandole come
word:
-dw
0000:0000
0000:0000 1068
00A7
018B 0070 0016 03B1 018B 0070
0000:0010 018B 0070 06B9 0212 0740
0212 03FF 0212
0000:0020 0746 0212 06EC 0E92 003A
03B1 0054 03B1
0000:0030 006E 03B1 0088 03B1 00A2
03B1 03FF 0212
0000:0040 08A9 0212 09A4 0212 09AA
0212 045D 0212
0000:0050 09B0 0212 020D 02ED 6A25
12A3 058B 0212
0000:0060 0C0E 0212 0C14 0212 0C1F
0212 06AD 0212
0000:0070 06AD 0212 F0A4 F000 0537
0212 3590 C000 |
|
 | In realtà sappiamo di più: si tratta di
vettori, cioè di
indirizzi logici organizzati nella forma
segment:offset;
SymDeb è in grado di
fornire, con il comando
dd, anche la visualizzazione di tipo doubleword:
-dd
0000:0000
0000:0000 00A7:1068
0070:018B 03B1:0016 0070:018B
0000:0010 0070:018B 0212:06B9
0212:0740 0212:03FF
0000:0020 0212:0746 0E92:06EC
03B1:003A 03B1:0054
0000:0030 03B1:006E 03B1:0088
03B1:00A2 0212:03FF
0000:0040 0212:08A9 0212:09A4
0212:09AA 0212:045D
0000:0050 0212:09B0 02ED:020D
12A3:6A25 0212:058B
0000:0060 0212:0C0E 0212:0C14
0212:0C1F 0212:06AD
0000:0070 0212:06AD F000:F0A4
0212:0537 C000:3590 |
|
 | Tutto ciò è molto istruttivo;
in tutti e 3 i casi le figure mostrano i primi
32 vettori inclusi in tabella, ma mentre l'ultima
li propone nella loro classica forma segmentata
la prima mette in evidenza come, effettivamente,
i 4 bytes che concorrono a definire il puntatore siano
inclusi in memoria alla rovescia, cioè con
la più volte citata tecnica Lo-Hi (prima
la parte bassa e poi
quella alta, regola addirittura estesa alla
struttura, prima l'offset e poi il
segment) |
 | Nelle figure ho usato diversi colori per sottolineare
questa importante regola, sempre valida anche quando tocca a noi inserire
word
o doubleword in memoria. |
 | Ho già anticipato che l'analisi della
Tabella dei
Vettori d'Interruzione è molto
accattivante, aiuta a capire i segreti; per questo uno dei primi esercizi di
programmazione, altamente didattico, consiste nella realizzazione di un
analizzatore di tabella. |
 | Se lo desideri ne ho curato personalmente una versione
super,
Tabvett.COM,
scaricabile qui;
l'immagine seguente ti mostra la prima delle schermate ottenibili con questa
originale utility:
|
 | In dettaglio essa riassume e riorganizza (in nero)
i primi 32 vettori proposti dalla
schermata di debug, aggiungendo (in giallo) l'indirizzo logico della
locazione della tabella in cui è conservato
il vettore e (in bianco su rosso) anche il numero esadecimale associato a
ciascun vettore. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|