Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Capitolo 1

Home » Programma il Computer » Tutorial Assembly

Capitolo 1 - Il processore - Il Debugger

  Il Processore e il Debugger

LA GRANDE LIBRERIA 3/9 [54 di 60] 

    

    Come trovare i libri della Libreria
     
bulletSi pone ora il problema di poter accedere a ciascun libro; per ora è noto che ognuna delle possibili raccolte di procedure avrà un numero da 00H a FFH, nella logica binaria di un processore.
bulletI suoi astuti costruttori hanno pensato ad una apposita istruzione in grado di accedere a ciascuna di esse semplicemente passandole come operando il corrispondente numero.
bulletQuesta istruzione è INT xyH, con xyH uguale ad uno qualunque dei possibili valori, tra 00H e FFH; si tratta di un'istruzione di chiamata di procedura, di norma costituita da 2 bytes (il codice operativo CDH e l'operando a 8 bit xyH).
bulletIl suo compito assomiglia a quello svolto dall'istruzione CALL address: la differenza sta nel fatto che questa è destinata a chiamare le nostre procedure (cioè quelle definite per nostro comodo nei nostri programmi sorgente) mentre INT xyH rende disponibili le procedure di sistema (cioè quelle predisposte dal costruttore nella BIOS o dal sistema operativo o dalle sue estensioni).

      

bulletMa perchè, per puntare una procedura, INT usa un numero esadecimale a 8 bit invece di un indirizzo esplicito come invece fa CALL? Come è possibile? La risposta non è banale...

      

bulletIl processore deve poter ricostruire l'indirizzo dal numero e lo può fare solo con l'aiuto di una struttura appositamente inventata: la Tabella dei Vettori.
bulletCon riferimento al processore 8086 (o comunque al funzionamento in modo reale) si tratta di un'area posta esattamente all'inizio della memoria RAM convenzionale, cioè proprio nelle prime locazioni, da 00000H (=0000:0000) a 003FFH (=0000:03FF), destinata a raccogliere 256 puntatori  (detti anche Vettori), uno per ciascuna delle possibili raccolte di procedure (libri).
bulletPoiché ciascun puntatore è strutturato nella forma segment:offset (cioè coinvolge 4 bytes) l'area di memoria necessaria sarà di 1024 bytes (1k).

      

Suggerimento La Tabella dei Vettori ospita l'elenco degli entry-point (indirizzo logico, segment:offset) della locazione di memoria a partire dalla quale sarà disponibile il codice macchina di ciascuna delle possibili 256 procedure di sistema (i libri presenti nella grande libreria), catalogate progressivamente per titolo, da 00H a FFH.

      

bulletSi tratta di una struttura dinamica, nel senso che qualunque software fatto girare successivamente (anche quelli prodotti da noi) può sostituire i vettori predisposti, purchè a ciascun nuovo puntatore sia associato anche un nuovo servizio alternativo funzionante!
bullet Il compito di trovare il vettore a partire dal numero n (binario a 8 bit) e di eseguire il codice puntato dal vettore spetta proprio alla potente istruzione INT xyH: in pratica:
bulletmoltiplica per 4 il numero n, localizzando la prima delle 4 locazioni della tabella nelle quali è ospitato l'indirizzo logico effettivo della procedura corrispondente.
bulletestrae i 4 bytes, ordinati con la consueta logica Lo-Hi (cioè rispettivamente con il significato: Low OFFSET, High OFFSET , Low SEGMENT , High SEGMENT), e li copia nei 2 registri CS:IP.
bulletin questo modo obbliga il processore ad eseguire la procedura di sistema desiderata.
bulletNaturalmente l'istruzione INT, detta Interrupt software, provvede anche ad altri compiti di contorno, descritti nella scheda ad essa dedicata, volutamente ignorati per non perdere d'occhio il nostro obiettivo.
bulletPer esempio se abbiamo bisogno delle procedure che controllano il video chiameremo INT 10H:
bulletla CPU calcola il punto esatto della Tabella in cui è scritto il vettore corrispondente, moltiplicando per 4 il numero 10H, passato come operando (10H*4=00040H, 64 bytes sotto l'inizio)
bulletquindi preleva dalle 4 locazioni consecutive (da 00040H a 00043H) i bytes in esse contenuti, e li trasferisce in CS:IP.
bulletSe il vettore recuperato dalla tabella (e finito in CS:IP) fosse C31C:198A sarebbe stato rappresentato dalla sequenza dei seguenti bytes:

      

Vettore in Tabella byte
0000:0040 8A
0000:0041 19
0000:0042 1C
0000:0043 C3

    

Pagina Precedente Capitolo 1 Pagina Successiva LA GRANDE LIBRERIA 3/9   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
54 di 60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

    

CAP. 1 » 1. Processore 80x86 2. Istruzioni 80x86  3. Debug  4. La Grande Libreria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati