Debug
Programmazione assembler
DEBUG.COM



Il modo più immediato di scrivere programmi in
Assembly per x-86 è tramite il programma di Sistema
Operativo DEBUG.COM fornito su tutte le piattaforme
Microsoft tramite la Shell di MsDos (invocabile a sua
volta usando il comando cmd).
Con questo programma si scrivono programmi
assembly x-86 in formato COM e con indirizzi assoluti
numerici.
DEBUG.COM è disponibile su ogni piattaforma
Microsoft x-86 (ovvero da MsDos fino a Win32). Non
su Windows7 64 bit.
I comandi



Debug è un ambiente a carattere, con un
prompt (il trattino) che attende un comando
dell’utente.
Tutti i numeri utilizzati con Debug sono
sempre in formato esadecimale; per usare
una diversa rappresentazione va specificato
il formato in coda al numero.
Debug non è case sensitive, ovvero non
distingue se il comando è scritto in
maiuscolo o in minuscolo, comportandosi
allo stesso modo in entrambi i casi.
Comandi debug
d (dump)
(esplorare la memoria)
Risultato del comando d

8 righe così strutturate:



sinistra: indirizzo (segmento e offset)
centro: contenuto dei 16 byte (in
esadecimale).
destra: mostra le stesse 16 celle di memoria
in formato Ascii stampabile, cioè escludendo
i simboli con codici Ascii da 00h a 1Fh
(caratteri di controllo) e da 80h a FFh
(caratteri Ascii estesi). Se il carattere non è
stampabile, viene sostituito da un punto.
r (operare con i registri)



Consente di visualizzare il contenuto e lo
stato dei registri x-86, e di impostarne il
valore.
I valori visualizzati sono espressi in
esadecimale, mentre il registro dei Flags è
mostrato attraverso delle sigle
convenzionali.
Esempi:



r Visualizza lo stato dei registri
r CX Imposta il registro CX
r f Imposta uno o più bit del registro dei Flag
Comando r (esempio)
Scrivere un programma
1.
2.
3.
4.
5.
Comando A – scrivere le istruzioni (e d i t )
Terminare la fase di edit con un invio su una
riga vuota
Comando R
– impostare la lunghezza del programma
Comando N
– Assegnare il nome al programma
Comando W
– Salvare il programma su disco
Comando a





Il comando A deve essere specificato con l’[indirizzo]
impostato a 100 (esadecimale); la prima istruzione di
un programma .COM deve sempre trovarsi all’indirizzo
100 (h).
A 100 per cominciare la fase di edit.
Ad ogni pressione del tasto Enter (Invio) l’istruzione è
confermata e si può scrivere la successiva.
Debug riporta sempre l’indirizzo delle istruzioni
digitate.
Per terminare l’editazione del programma, bisogna
premere Enter su una riga vuota
Lunghezza del programma
Calcolare la lunghezza in byte del
programma sottraendo l’indirizzo
iniziale (100h).
 Questa dimensione va specificata nel
registro CX tramite il comando R,
nella forma R CX.
 Si digita la dimensione e la si
conferma con Enter.

Nome del programma (n)
Ora si può assegnare il nome al
programma con il comando N.
 Il nome deve rispettare le regole per
gli identificatori di MsDos e deve
avere estensione COM.
 Esempio N PROVA.COM.

Scrittura e uscita (w) (q)
Il comando W salva il programma su
disco (nella cartella corrente).
 Ora si può uscire (comando Q) e
lanciare il programma dal prompt di
MsDos.

terminazione programma
Ogni programma quando termina
deve avvisare il Sistema Operativo
tramite una interruzione sw specifica.
 L’avviso di terminazione, che deve
essere sempre l’ultima istruzione
 Interruzione DOS


INT 20h
Il programma più corto …
Istruzione nop
Sintassi: NOP
 Scopo: Non fa nulla. Usata per scopi
di servizio, esempio per allineare una
sequenza di istruzioni.
 Esempio: NOP

Modificare un programma
Visualizzare un carattere




Per visualizzare un carattere è possibile
utilizzare l’interruzione BIOS 10h
Con sottofunzione 0Eh
Il codice ascii del carattere da visualizzare
va posto in AL
Esempio:



mov al,43 Codice Ascii da stampare (43h =
‘C’)
mov ah,0e Sottofunzione 0Eh di INT 10h,
Stampa carattere sullo Schermo
int 10 Lancio interruzione sw Bios 10h
Problemi
Visualizzare il primo carattere del
proprio nome
 Visualizzare il proprio nome
 Visualizzare il numero 8

Scarica

Debug - Alberto Ferrari