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

Schede del Tutorial

Home » Programma il Computer » Tutorial Assembly

Le Schede del Tutorial

  La Tabella dei Vettori

SCHEDA n° 04 [ 13  di 15] 

    

    Modifica e sostituzione (rimappatura) di un Vettore [3 di 4]
  
   
bullet
    Creazione di un Nuovo Gestore
bulletLa creazione di una nuova procedura di gestione può aver bisogno dell'indirizzo del vecchio Gestore; per questa ragione diamo per scontato che il programma che lo ospita contenga anche le variabili di deposito definite nella pagina precedente, cioè la variabile DWORD (DD, 32 bit, 4bytes, segment:offset del puntatore) e/o le 2 variabili WORD (DW, 16 bit, 2bytes, parte segment e parte offset del puntatore), chiamate rispettivamente old_INT e old_SEG/old_OFF:

      

old_INT     DD    00000000H

old_SEG     DW    0000H
old_OFF     DW    0000H

      

bulletIl nuovo Gestore associato al Vettore può:
bulletessere del tutto diverso dall'originale, assicurando servizi del tutto alternativi; non sempre questa è la soluzione migliore dato che, in questo caso, le caratteristiche originali vengono completamente perdute e il sistema potrebbe non assicurare un corretto funzionamento.
bulletpuò chiamare il vecchio Gestore, come se fosse una normale Procedura del sistema, aggiungendo subito dopo il nuovo servizio: in questo caso le caratteristiche originali vengono comunque garantite, insieme a quelle da noi desiderate; per lanciare regolarmente il Gestore originale si usa questa tecnica:

      

            PUSHF             ;Lancia regolarmente il Gestore
            CALL  CS:[old_INT];originale che svolge i suoi
                              ;normali compiti tradizionali
                              ;
            ....  ......      ;** Attiva il servizio desiderato
                              ;

      

bulletpuò provvedere subito alle esigenze del nuovo servizio e poi rientrare nel vecchio Gestore, con un normale Salto Far; anche in questo caso le caratteristiche originali vengono comunque garantite, insieme a quelle da noi desiderate:

      

                              ;
            ....  ......      ;** Attiva il servizio desiderato
                              ;
                              ;Rientra regolarmente nel Gestore
            JMP   CS:[old_INT];originale, che svolge i suoi
                              ;normali compiti tradizionali

      

bulletIn ogni caso è sempre opportuno salvare all'inizio il contesto con PUSH dei registri utilizzati (comprese le flag del processore); supponendo che la nuova procedura di servizio si chiami new_INT, la sua parte iniziale potrebbe essere:

      

new_INT     PROC  FAR
            PUSH  AX          ;
            PUSH  BX          ;Salvataggio dei registri, in accordo
            PUSH  CX          ;con la migliore tradizione di
            PUSH  DX          ;progetto delle procedure di
            PUSH  DI          ;servizio delle interruzioni
            PUSH  SI          ;
            PUSH  DS          ;
            PUSH  ES          ;
            PUSHF             ;
                              ;
            ....  ......      ;** Attiva il servizio desiderato
                              ;

      

Attenzione ! Se si tratta di un Nuovo Gestore HardWare, dopo aver eseguito le desiderate operazioni di servizio, è assolutamente necessario ricordare che, prima di restituire il controllo, bisogna avvisare il controllore delle interruzioni (8259) che la procedura di servizio è terminata spedendogli il codice 20H di Fine Interruzione.

      

bulletL'Integrato 8259 è accessibile attraverso il registro di Comando Interruzioni, di indirizzo 0020H (_8259ct); al termine di ogni procedura di servizio di interruzione Hardware è necessario segnalarne la fine spedendogli la parola esadecimale 20H = EOI = End Of Interrupt, con le seguenti istruzioni:

      

            PUSH  AX
            MOV   AL,EOI
            OUT   _8259ct,AL
            POP   AX  

      

bulletNaturalmente la procedura dedicata al nuovo gestore terminerà con il recupero del contesto iniziale con POP dei registri precedentemente salvati, riabilitando le interruzioni mascherabili (con STI) e ricordandosi di restituire il controllo con IRET:

      

            POPF 
            POP   ES
            POP   DS
            POP   SI
            POP   DI
            POP   DX
            POP   CX
            POP   BX
            POP   AX
            STI     
            IRET
new_INT     ENDP

    

Pagina Precedente Scheda n° 04 Pagina Successiva La Tabella dei Vettori Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 04 -  13
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
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