|
[La logica di presentazione degli argomenti
di questo modulo si ispira a Linguaggio Assembly per pc IBM
di Peter Norton]
Debug
Il file Debug.com e' un programma allegato
al DOS.
Debug e' una utility che consente di controllare il funzionamento
passo passo di un programma.
- Aprire la shell di DOS.
- Digitare debug. Il DOS resta in attesa.
Comando r
Digitando r [register] debug mostra il valore
dei registri del processore.
Analizziamo il contenuto: compaiono 3 righe di valori.
Nella prima riga troviamo:
Le prime 4 coppie di lettere simbolizzano i 4 registri d'impiego
generale, le seconde 4 coppie di lettere simbolizzano registri
dedicati del nostro processore. Il numero di 4 cifre che segue
al registro rappresenta il contenuto (in forma esadecimale) del
registro. Sempre tramite il comando r si puo' visualizzare il
contenuto di un registro specifico e modificarne il contenuto
[i caratteri in neretto sono quelli che dovremo inserire. I caratteri
non in neretto sono gia' presenti in memoria e variano da pc a
pc a seconda delle operazioni che questi hanno compiuto in precedenza]:
Se accanto a : scriviamo un numero e premiamo
invio possiamo riscrivere r e verificare se il contenuto del registro
e' stato modificato. E' stato modificato.
Utilizziamo ora i registri tramite debug. I processori x86 per
compiere qualsiasi operazione utilizza i registri. Ad esempio
per addizionare 1 a 2 utilizzeremo i registri AX e BX.
|
- r ax
ax 0000
: 1
- r bx
ax 0000
: 2
|
Ora collochiamo l'istruzione di addizione
nella memoria [01d8 e' il corrispettivo in linguaggio macchina
dell'istruzione ADD (addizione)].
- e 100
166c:100 ba. 01
- e 101
166c:100 0e. d8 |
Se digitiamo il comando r vedremo che:
i registri AX e BX contengono effettivamente i numeri esadecimali
1 e 2 e che nella terza riga della schermata appare l'istruzione
esadecimale dell'addizione [01d8] e anche la sua definizione mnemonica
ADD AX,BX.
La prossima operazione e' quella di segnalare al debug la locazione
del'istruzione di addizione. A questo scopo vengono impiegati
il registro CS [Code Segment] e il puntatore IP [Instruction Pointer].
CS e' stato impostato automaticamente da Debug mentre IP punta
di default a 100 [ma i valori potevano essere diversi].
Comando t
Digitando il comando t [trace] debug esegue
l'operazione.
Se digitiamo ora r vedremo che:
AX=3 BX=2, ovvero la somma dei due registri AX e BX e' finita
in AX come nel caso della somma x = x + y.
L'operazine di addizione appena effettuata e' stata compiuta inserendo
il numero esadecimale 2h [h sta per esadecimale, 0010 in bit.
Tabella
di conversione esadecimale-binario] nel registro AX di 16
bit [8088 e' un processore a 16 bit: 0000 0000 0000 0000].
Tutti i registri possono essere divisi in due registri [2 byte]:
registro alto AH e registro basso AL.
Ora se volessimo inserire due valori da addizionare nello stesso
registro utilizzando i due byte [0000 0000 - 0000 0000, ovvero
AH e AL] dovremmo procedere in questo modo utilizzando un diverso
comando di addizione [00c4]:
-
e 100
166c:100 ba. 00
- e 101
166c:100 0e. c4 |
Ora se digitiamo r vedremo nella terza
riga: ADD AH,AL [bisogna ricordare di impostare ip a 100]. Il
prossimo passo e' quello di inserire i due numeri in AX.
Se digitiamo ora r vedremo che il registro
AX ha adesso il contenuto 0102.
Ora digitando t vedremo questo risultato: AX=0302. cio significa
che AL ha addizionato il proprio contenuto a AH [02 + 01] e il
risultato e' stato inserito in AH lasciando in AL il contenuto
originale [02].
|