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 11/14 [22 di 60] 

    

    I  Registri delle Flag
     
bulletLa rassegna dei registri del processore 8086 termina con il registro dei flag (o, come piace a me, delle flag, pensando ad esse per quello che sono, delle bandiere); a qualcuno di noi verrà in mente qualche polveroso film di guerra, di quelli di propaganda, in bianco e nero..., con l'omino che, in mezzo alla pista d'atterraggio di una porta-aerei, si sbraccia con in mano 2 bandierine colorate per aiutare il pilota a non ...sfasciarsi sulla tolda...
bulletEcco ... queste sono le (Maritime Signal) Flags da cui quei 4 mattacchioni di tecnici Intel hanno tratto l'idea e il nome: flag = segnalazione!

      

bulletSi tratta di uno strano registro a 16 bit, dall'impiego completamente diverso da tutti gli altri.
bulletIl suo contenuto non è da utilizzare nella consueta forma di word, ma in funzione del valore dei singoli bit in esso contenuti; dei 16 disponibili solo 9 sono significativi, mentre i rimanenti 7 sono inutilizzati. Di questi:
bullet6 sono flag di stato, di solito influenzate dal risultato delle istruzioni aritmetico logiche.
bullet3 sono flag di controllo, di solito controllabili da programma con opportune istruzioni dedicate.

      

Suggerimento Il compito di questo registro è straordinariamente importante: al lato pratico, il suo contenuto consente al processore di prendere decisioni!

      

bulletCome abbiamo sottolineato in occasione della descrizione delle istruzioni di salto condizionato la CPU di solito decide saltando da una parte piuttosto che da un'altra.
bulletIl valore binario di una singola flag è dunque sufficiente per obbligare il processore ad eseguire un codice invece di un altro; ne consegue che non esistono (e sarebbero poco intelligenti) istruzioni che modifichino in blocco questo registro, sebbene sia possibile scriverlo (?!) o leggerlo da o in un altro registro a 16 bit con il solito trucco (per esempio: con  PUSHF/ POP AX  avremo in AX la copia esatta di tutti e 16 i bit).
bulletIn ogni caso è possibile salvarne il valore nello stack (con  PUSHF ) o recuperarlo dallo stack (con  POPF ).

      

bulletIn dettaglio ecco l'aspetto di questo registro; ciascuna delle flag in esso contenuta è da ritenersi settata se si trova al valore 1, e resettata se a 0:

      

15

           

8

7

           

0

0 0 0 0 OF DF IF TF SF ZF 0 AF 0 PF 1 CF

      

bulletAnalizziamo lo scopo delle 6 flag di stato:

      

CF

(Carry Flag, flag di Riporto): viene forzata a 1 se una somma/sottrazione ha prodotto riporto/prestito; influenza i seguenti salti condizionati: JC (salta se CF=1),  JNC (salta se CF=0),  JB (salta se CF=1),  JAE (salta se CF=0),  JA (salta se CF=0 e ZF=0),  JBE (salta se CF=1 o ZF=1).
PF (Parity Flag, flag di Parità): viene forzata a 1 se il risultato di un'operazione contiene un numero pari di 1.
AF (Auxiliary Flag, flag di Riporto Ausiliario): viene forzata a 1 se un'operazione ha prodotto riporto tra il primo (bit0÷bit3) e il secondo nibble (bit4÷bit7).
ZF (Zero Flag, flag di Zero): viene forzata a 1 se un'operazione ha dato risultato nullo; influenza i seguenti salti condizionati: JZ (salta se ZF=1),  JNZ (salta se ZF=0),  JE (salta se ZF=1),  JNE (salta se ZF=0),  JG (salta se ZF=0 e SF=OF),  JLE (salta se ZF=1 o SF<>OF),  JA (salta se ZF=0 e CF=0),  JBE (salta se ZF=1 o CF=1).
SF (Sign Flag, flag di Segno): viene forzata al valore corrente del bit più significativo del risultato di un'operazione; come è noto nei numeri con segno 0 significa positivo e 1 significa negativo; influenza i seguenti salti condizionati: JS (salta se SF=1),  JNS (salta se SF=0),  JG (salta se SF=OF e ZF=0), JGE (salta se SF=OF),  JL (salta se SF<>OF),  JLE (salta se SF<>OF o ZF=1).
OF (Overflow Flag, flag di Overflow): viene forzata a 1 se un'operazione ha prodotto trabocco, cioè ha superato il numero massimo per il registro coinvolto (256=100H a 8bit, 65536=10000H a 16bit, ecc); influenza i seguenti salti condizionati: JO (salta se OF=1),  JNO (salta se OF=0).

      

bulletParimenti vediamo lo scopo delle 3 flag di controllo:

      

TF

(Trap Flag, flag di Cattura): molto utile perchè, se  forzata a 1 (di solito con  INT 03H ) blocca nel punto predeterminato l'esecuzione di un programma in ambiente Debug; si presta dunque alla grande per l'esecuzione passo-passo (single-step) dei programmi.
IF (Interrupt Flag, flag d'Interruzione Mascherabile): se forzata a 0 consente di disabilitare (mascherare) la possibile interruzione da parte di uno dei dispositivi abilitati a ciò; può essere controllata da software con  STI (che la forza a 1) o  CLI (che la forza a 0).
DF (Direction Flag, flag di Direzione): indispensabile nella gestione delle stringhe ( MOVS , STOS o LODS ) per stabilire se i registri indice coinvolti (DI o SI) devono essere incrementati (DF=0) o decrementati (DF=1); può essere controllata da software con  STD (che la forza a 1) o  CLD (che la forza a 0).

      

bulletSolo per completezza, a partire dal 80286 sono disponibili 2 nuove flag e a partire dal 80386 altre 3; in questo ultimo caso anche questo registro (come gli altri) è a 32 bit, EFLAG, aumentando di conseguenza anche il possibile numero di flag:

      

31

           

24

23

         

 

16

15

           

8

7

         

 

0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 VM RF 0 NT IOPL IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF

      

bullet

Le nuove sono:

      

IOPL

(I/O Privilege Level, livello di privilegio I/O), disponibile già con 80286, specifica (con i suoi 2 bit) uno dei 4 diversi livelli di privilegio richiesti nelle operazioni di input/output
NT (Nested Task Flag, flag di task annidato), disponibile già con 80286, controlla il funzionamento di una istruzione IRET ed è normalmente uguale a 0 in modo reale.
RF (Resume Flag, flag di ripresa)
VM (Virtual Mode Flag, flag del modo virtuale)

    

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