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