190 likes | 323 Views
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).
E N D
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.
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
Scrivere un programma • 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
Istruzione nop • Sintassi: NOP • Scopo: Non fa nulla. Usata per scopi di servizio, esempio per allineare una sequenza di istruzioni. • Esempio: NOP
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