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

DEBUG 19/22 [47 di 60] 

    

bulletI comandi più importanti del debugger sono certamente quelli descritti in questa pagina e nella successiva: la loro azione è rivolta decisamente al collaudo di un programma, cioè alla sua esecuzione controllata.

Benedetto sia Debug e il suo inventore! 

bullet Se il tuo programma fa i capricci e il tuo umore assomiglia ad una notte senza luna, basta forzare l'esecuzione fino ad un certo punto sicuro (comando G) e poi procedere a piccoli passi (comando T) evitando di eseguire (comando P) le procedure personali (riconoscibili dallo mnemonico CALL) o di sistema (attivate dall'istruzione INT).
bulletL'errore salta fuori da solo, di solito con un ghigno di superiorità, per farti capire quanto sei frescone... Non dimenticare: 

il computer ha sempre ragione....
per il semplice fatto che tu lo hai istruito

      

    Comando T -  Traccia di un programma eseguibile 
     
bulletIl comando T (TRACE, traccia) esegue una o più istruzioni; di solito viene usato senza parametri, al fine di eseguire l'istruzione corrente (cioè quella puntata da CS:IP); subito dopo visualizza automaticamente la nuova situazione dei registri e le informazioni relative all'istruzione cha sta per essere eseguita (indirizzo logico, codici associati e stringa mnemonica).
bulletLa tecnica garantita da questo comando è nota come esecuzione passo-passo.
bulletQuesto comando consente l'uso di 2 parametri, entrambi poco pratici (almeno dal mio punto di vista):
bulletil primo consente di specificare l'indirizzo della prima istruzione da eseguire (P.es: T = 0112, notare il segno "uguale", mai usato finora...); anche volendo far partire l'esecuzione da un certo punto intermedio del programma l'effetto non è quello ottenibile nell'esecuzione passo-passo dall'inizio: verrebbe a mancare infatti l'influenza sui registri di tutte le precedenti istruzioni.
bulletil secondo parametro è rischioso, se usato con sufficienza o scarsa attenzione; consente di eseguire di seguito più istruzioni, semplicemente indicandone il numero subito dopo  (P.es: T 12). Il rischio è di entrare dentro le procedure e perdere il filo del programma, specialmente se si entra in una INT di sistema.
bulletDopo aver caricato il programma prova.com, usato nel capitolo 2 per esercitarci nella sua creazione, e dopo averlo visualizzato con il comando U (parte alta dell'immagine), possiamo vedete l'effetto dell'esecuzione passo-passo delle prime 3 istruzioni (parte bassa):
   NB:   per poter vedere questo effetto devi prima scaricare il file eseguibile prova.com nella cartella di lavoro dell'Ambiente Assembler; per fare questo devi:
punto elenco cliccare su questo link  e rispondere Salva
punto elenco nel riquadro che si apre, scegliere la cartella radice (C:\) e confermare ancora Salva
punto elenco aprire il gestore risorse e selezionare la cartella radice (Disco locale C:\)
punto elenco fare doppio click su prova.zip e cliccare poi su extract per estrarre il file prova.com dall'archivio ZIP
punto elenco nel riquadro che si apre confermare ancora extract  (l'estrazione avverrà automaticamente al posto giusto) e confermare Yes quando verrà richiesto di sovrascrivere  (Would you like to replace the exixting file)
              
Apri una finestra DOS su Arch-Lab Se fai click sull'icona a sinistra si apre l'Ambiente Assembly e puoi provare DEBUG  on-line.
S
cegli il pulsante di opzione "Aprire il file" o "Esegui l'applicazione"  e conferma con OK.
NB: alcuni gestori di protezione (per esempio SP2 di WinXP) non ti consentono questa operazione:
in questo caso scrivi
c:\arch-lab\bin\sys\assembler.pif direttamente nel campo indirizzo del Browser
-f 100 1000 00
-n prova.com
-l
-u
11A0:0100 B400 MOV AH,00
11A0:0102 B003 MOV AL,03
11A0:0104 CD10 INT 10
11A0:0106 B400 MOV AH,00
11A0:0108 CD16 INT 16
11A0:010A B44C MOV AH,4C
11A0:010C CD21 INT 21
11A0:010E 0000 ADD [BX+SI],AL
-t
AX=0000 BX=0000 CX=000E DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=11A0 ES=11A0 SS=11A0 CS=11A0 IP=0102 NV UP EI PL NZ NA PO NC
11A0:0102 B003          MOV AL,03
-t
AX=0003 BX=0000 CX=000E DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=11A0 ES=11A0 SS=11A0 CS=11A0 IP=0104 NV UP EI PL NZ NA PO NC
11A0:0104 CD10          INT 10
-t
AX=0003 BX=0000 CX=000E DX=0000 SP=FFF8 BP=0000 SI=0000 DI=0000
DS=11A0 ES=11A0 SS=11A0 CS=0212 IP=08A9 NV UP DI PL NZ NA PO NC
0212:08A9 2E803EA70802  CMP Byte Ptr CS:[08A7],02        CS:08A7=00

      

bulletOsserviamo con calma cosa ci fornisce Trace:
bulletla pagina si riempie di campi simili: in particolare possiamo seguire i cambiamenti dei registri dopo l'azione dell'istruzione appena eseguita; per esempio l'azione della prima T (esegue MOV AH,00) non cambia il registro AH (che è già a 00H) ma la seconda T (esegue MOV AL,03) produce il cambiamento di AL; si vede chiaramente che AX=0003H)
bulletl'azione della terza T è una cosa inutile e sbagliata perchè ci obbliga a seguire il codice di una procedura di sistema (INT 10) di cui diamo per scontata l'esattezza; in questi casi bisogna stare attenti e dare, in vece, il comando P

      

Ricorda... Le istruzioni INT xx non vanno tracciate con il comando T, ma eseguite in blocco con il comando P; la loro traccia può essere interessante solo a fini didattici o di auto-istruzione, per vedere come sono fatte...

      

bulletnotare come l'azione della terza T abbia cambiato il registro IP in modo diverso e drastico rispetto ai prevedibili cambiamenti imposti dalle prime 2 tracce; anche il valore del registro di segmento ha assunto un valore diverso rimarcando il fatto che non siamo più dentro il nostro programma (o meglio nel segmento ad esso riservato dal debugger) ma Dio sa dove!...; l'indirizzo fisico è 029C9H, inferiore a quello 11B04H da cui siamo partiti e, dovendo essere una procedura video (di solito caratterizzata da indirizzi del tipo CxxxxH), qualcuno la ha rimappata nella parte iniziale della Ram.
bulletSe per errore entriamo all'interno del codice di una INT è poi laborioso ritornare nel nostro programma: bisogna riportare sia CS che IP ai valori originali, sperando di non essere andati troppo avanti, cioè di non averli persi di vista irrimediabilmente...

    

Pagina Precedente Capitolo 1 Pagina Successiva DEBUG 19/22   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
47 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