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

PROCESSORE 80x86 10/14 [21 di 60] 

    

    I Registri Puntatore e i Registri Indice
     
bulletIl processore 8086 prevede 5 registri ufficialmente adatti a costituire la parte offset di un indirizzo logico; di solito sono distinti in registri puntatore (IP, SP e BP) e registri indice (DI e SI), tutti a 16 bit, indivisibili.
bulletIl concetto di offset è stato descritto nella pagina precedente: in sostanza, traducendo dall'inglese, significa spiazzamento, spostamento (distanza) da un punto iniziale, e rende bene l'idea del puntatore interno, in grado da individuare senza dubbi una qualunque delle possibili 65536 locazioni di un segmento.

      

bulletLa definizione dei registri di offset non può essere disgiunta dall'accoppiamento con un registro di segmento, sebbene nessuno ci vieti di usare ciascuno di questi registri come semplice deposito dati a 16 bit.
bulletCome in occasione della definizione degli altri registri è comunque utile ricordare che esiste un modo proprio di utilizzarli, cioè con gli accoppiamenti suggeriti dal set delle istruzioni; con questo concetto ben presente vediamoli dunque uno per uno.

      

bulletIl registro puntatore IP (Instruction Pointer) fa coppia esclusiva con CS, e viceversa; una coppia assolutamente ...fedele.
bulletIl puntatore logico CS:IP è assolutamente indispensabile per la vita di ogni programma in esecuzione, essendo lo strumento (Program Counter) con il quale il processore punta il (primo) codice operativo dell'istruzione che sta per essere da lui eseguita.
bulletSi tratta dunque di un registro completamente gestito dal processore stesso, nel senso che non esiste istruzione che possa modificarne direttamente il valore; in condizioni normali viene aggiornato direttamente dalle logiche interne del processore durante l'esecuzione dell'istruzione da esso puntata: il numero dei suoi bytes viene semplicemente aggiunto al valore iniziale, cosicchè IP, al termine dell'esecuzione, si ritrova correttamente a puntare l'istruzione successiva.
bulletIn modo indiretto (ma sempre per intervento del processore) il suo valore può essere cambiato anche radicalmente dall'esecuzione delle istruzioni JMP ,  CALL o  RET ; in nessun caso è conveniente manipolare in modo diverso il contenuto di questo registro.

      

bulletIl registro puntatore SP (Stack Pointer) fa coppia esclusiva con SS (sebbene, all'occorrenza, SS se la possa vedere anche con BP, che vedremo tra poco...).
bulletIl puntatore logico SS:SP è lo strumento con il quale il processore gestisce lo Stack, l'area di memoria nella quale annota gli indirizzi a cui tornare in caso di esecuzione di  CALL o  INT ; in ogni momento punta la prima locazione disponibile ad essere utilizzata.
bulletAnche questo registro è assolutamente indispensabile per la vita di ogni programma in esecuzione, e la sua modifica, pur possibile in modo anche esplicito, può rivelarsi sconveniente, se condotta con leggerezza e scarsa consapevolezza: i rischi di crash del programma in esecuzione (se non del computer stesso) sono molto elevati.
bulletIl registro è comunque gestito automaticamente dal processore in occasione dell'esecuzione di istruzioni che coinvolgono lo stack, come le coppie  CALL/ RET, INT/ IRET o  PUSH/ POP; in occasione di queste operazioni il valore del registro SP viene decrementato/incrementato di 2 bytes alla volta.

      

bulletIl registro puntatore BP (Base Pointer) fa coppia con SS ma non in assoluto.
bulletIl puntatore logico SS:BP è talvolta usato dal programmatore per puntare alcuni valori presenti nello stack: si tratta della tecnica di passaggio dei parametri tramite stack, molto frequente nei linguaggi di programmazione ad alto livello.
bulletE' facile capire che, intervenendo in un'area di memoria di solito riservata al processore, ogni operazione deve essere condotta con estrema attenzione, lasciando inalterato lo stato dei dati gestiti dal processore e soprattutto il puntatore ufficiale allo Stack, appunto SS:SP.
bulletPer questa ragione, sebbene tollerata, l'uso improprio dello Stack deve essere gestito con un secondo puntatore, SS:BP.
bulletCome ogni altro registro a 16 bit può, comunque, essere usato senza rischio anche in coppia con DS o ES, per puntare locazioni di memoria contenenti normali dati.

      

bulletI registri indice SI (Source Index) e DI (Destination Index) sono normali registri a 16 bit, sebbene il loro nome tradisca le funzioni alla quale il set delle istruzioni li destina.
bulletLe coppie di puntatori logici previste da numerose istruzioni del set sono DS:SI e ES:DI, rispettivamente utilizzate per puntare le aree di memoria da cui prendere (locazioni sorgente, come in MOVS ,  LODS ) e in cui mettere (locazioni destinazione, come in  MOVS ,  STOS ) i dati.
bulletDi solito queste potenti istruzioni provvedono anche a incrementare o decrementare il valore corrente di questi registri: poichè si tratta di operazioni piuttosto raffinate e impegnative si consiglia di consultarle direttamente nelle pagine ad esse dedicate.

      

bulletPer terminare ricordiamo che, comunque, è ammesso anche qualunque altro accoppiamento, che risulterà certamente meno efficace di quelli consigliati; entrambi i registri di segmento, DS e ES, possono essere usati in coppia con i registri di offset DI e SI, ma anche con BP e BX (quest'ultimo elevato al rango di puntatore).

      

bulletSolo per completezza,  a partire dal 80386 sono disponibili registri a 32 bit; i registri puntatori sono detti ESI, EDI, EBP, ESP e EIP, e quelli descritti in questa pagina sono ancora riconosciuti come loro parte bassa.

      

bulletIn aggiunta citiamo alcuni tra i nuovi registri, introdotti nel tempo:
bulleti 3 Control Register 80386:CR0, CR2, CR3.
bulletil Control Register Pentium:CR4.
bulleti 6 Debug Register 80386:DR0, DR1, DR2, DR3, DR6, DR7.
bulleti 5 Test Register 80486:TR3, TR4, TR5, TR6, TR7.
bulleti Model Specific Register Pentium: MSR.
bulleti Memory Type & Range Register PentiumPro: MTRR.

    

Pagina Precedente Capitolo 1 Pagina Successiva PROCESSORE 80x86 10/14   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
21 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