|
 |
Il Processore e il Debugger |
DEBUG 14/22
[42 di 60] |
|
 |
|
Aggiornato
24 settembre 2003 e 17 febbraio 2005 |
 |
|
Comando R - Mostra il valore corrente dei Registri CPU |
|
 | Il comando R
(REGISTER, registri) senza parametri
mostra il contenuto dei registri del processore; naturalmente si tratta di
una simulazione o meglio del valore che avrebbero i registri CPU mentre si
attende di cominciare l'esecuzione di un programma. |
 |
Se fai click sull'icona a
sinistra si apre l'Ambiente Assembly
e puoi
provare DEBUG
on-line.
Scegli
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 |
 |
 | Se l'indirizzo specificato è
solo quello di offset i dati visualizzati si ritengono
appartenenti al segmento di default, DS.L'immagine precedente si presta alle seguenti
considerazioni:
 | Tutti i registri "comuni"
(quelli utente AX,
BX, CX e
DX, e quelli indice
DI e SI, con
BP) hanno
valore iniziale 0000H. La cosa è
ragionevole: debug simula le condizioni ottimali; sebbene non sia
indispensabile è bene pensare di iniziare l'esecuzione di un programma
con i registri "puliti" |
 | tutti i registri di
segmento (CS,
DS, SS e
ES) hanno lo stesso valore; esso non è
prevedibile e dipende esclusivamente dall'indirizzo della prima
locazione libera in memoria nel momento in cui debug è stato allocato
dal loader del dos. |
 | L'immagine mostra 2 valori nettamente
diversi anche se cambia il debugger: con SymbDeb il valore è
1192H
mentre con il Debug standard del Dos leggiamo 0DE0H
; questo sta chiaramente ad indicare che nel primo caso l'allocazione
del Symbolic Debug ha consumato molta più memoria di quanta ne abbia
richiesta il secondo. |
 | E' molto probabile che il valore che tu
stai leggendo nella shell dos in cui provi i comandi che ti descrivo, sia
a sua volta diverso da quelli mostrati in figura! ma la
cosa non è per nulla importante: basta prendere atto che debug riserverà
al programma che stiamo per collaudare un
intero segmento, a partire dall'indirizzo
logico CS:0000 (nel nostro esempio 1192:0000
o 0DE0:0000, pari all'indirizzo
fisico 11920 o 0DE00). |
 | Il puntatore di istruzione (IP) sarà
lasciato sempre a 0100H, così come sarebbe in realtà se il programma
sotto test fosse allocato in memoria senza la tutela del debugger.
Abbiamo più volte sottolineato che il loader del Dos vuole per sè le
prime 256 locazioni, per il Prefisso di Segmento di Programma (PSP). |
 | Il puntatore di
Stack
(SP) ha sempre un valore piuttosto elevato, decisamente grande con SymbDeb,
ED5DH, e più verosimile
con il debug standard, FFEEH; se il programma
da sottoporre a test non fosse ospitato il valore corretto sarebbe
FFFEH,
solo 2 locazioni sopra la fine del segmento. |
 | Il fatto che i valori imposti dai debugger
siano maggiori fa pensare che essi stessi utilizzino una parte dello
stack per motivi personali... |
|
 | Una trattazione a parte merita la
visualizzazione dell'ultimo registro, quello dei flag
(o delle flag, come piace a me,
pensando ad esse per quelle che sono, delle bandiere,
femminile!); esso è visualizzato in forma interpretata (zona
gialla della figura precedente), cioè al posto dei bit significativi
viene mostrata la sigla della flag corrispondente, in accordo con la
tabella:
| FLAG |
SET |
RESET |
| Overflow |
Overflow |
OV |
si |
NV |
no |
| Direction |
Direzione |
DN |
decremento |
UP |
incremento |
| Interrupt |
Interruzione |
EI |
abilitato |
DI |
disabilitato |
| Sign |
Segno |
NG |
negativo |
PL |
positivo |
| Zero |
Zero |
ZR |
si |
NZ |
no |
| Auxiliary
Carry |
Riporto
ausiliario |
AC |
si |
NA |
no |
| Parity |
Parità |
PE |
pari |
PO |
dispari |
| Carry |
Riporto |
CY |
si |
NC |
no |
|
 | Il comando RF
mostra lo stato corrente delle 8 flag documentate: se si vuole è
possibile modificare una o più di esse, semplicemente specificando la sigla
del nuovo stato, anche in ordine casuale: |
 | Di solito il comando R
è utile per modificare il valore di un registro; per questo è necessario
far seguire al comando la sigla del registro desiderato. Non appena si
conferma con Invio viene proposto il vecchio attuale e, sulla linea
successiva, appare il segno dei 2 punti, dopo il quale è possibile
digitare il nuovo valore, da confermare ancora con Invio: |
 | Da notare che, con SymbDeb il nuovo valore si
può dare direttamente dopo il nome del registro, mentre il debug standard
segnala errore: |
 |
Il
comando R è molto utile e importante: ogni volta che si
desidera ricominciare l'analisi e il collaudo di un programma è
necessario obbligare il processore a puntare la prima istruzione:
non è dunque possibile fare a meno del comando R
IP seguito dal valore 0100 ! |
 | Prima di chiudere mettiamo in evidenza la
buona disponibilità di questo comando: dopo aver mostrato il valore
corrente di tutti i registri esso aggiunge (bontà sua...) anche l'indirizzo,
i bytes e la stringa
mnemonica dell'istruzione corrente (in
celeste, nella prima figura della pagina) cioè dell'istruzione che
sta per essere eseguita (puntata ovviamente da CS:IP). |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|