Programmi in Assembly

Installato Dosbox e montata una cartella contenente il programma debug.exe (leggete l’articolo relativo) provate ora a scrivere alcuni semplici programmi.

Scrivere un programma che ….non fa nulla!

Avviate il programma debug.exe e scrivete il programma sotto :

  • assembla in memoria a partire dalla cella 100h (100 esadecimale= 256 binario)
  • interruzione n. 20h (termina il programma COM: MDOS interrompe via software la cpu e gli chiede di terminare il programma)

a questo punto premete invio e impostate la lunghezza del programma: dovete usare il comando R e scrivere la lunghezza nel registro contatore di programma CX. Il programma è lung 2 Byte perchè l’istruzione “int 20” ha tale lunghezza. La dimensione si evince anche dall’indirizzo riportato 0CE1:0102 che differisce dal precedente di 2 Byte. Infine dovete dare il nome short.com al programma con il comando “N”, scriverlo sulla memoria di massa con il comando W, uscire dell’editor debug con Q (quit).

 

c:>debug               avvia l’editor del debug
-a 100                        il programma va in ram a partire dall’indirizzo 100 (hex)
-0CE1:0100 int 20       interrupt e  richiesta sw del DOS alla cpu di terminare il programma
-0CE1:0102                 riga vuota
-r cx                         comando per importare lo spazio in memoria riservato al programma
-CX 0000                 avvisa che nel registro contatore è posto il valore 0000
:2                                 inserisci la lunghezza: 2 Byte
-n short.com                impostiamo il nome del programma cn il comando “N”
-w                            scrivere il programma su disco fisso
Scrittura di 2 byte in corso
-q                                  uscire dall’editor debug.exe
c:\>short.com       digitate il nome del programma e premete invio per eseguirlo
c:\>                          prompt di MSDOS

 

 

 

 

 

 

 

 

 

 

 

 

 

Modifichiamo il programma.

Aggiungiamo al programma l’istruzione “nop” la quale “non fa nulla”, serve per allungare un programma o per riempire spazi vuoti in memoria o spostare indirizzi di altre istruzioni.

 

c:>debug
-n short.com      richiamiamo short.com
-l                           caricamento (load)
-u 100 l2             disassemblaggio da 100h per 2 byte
-0CE1:0100 int 20
-a 100                  assemblaggio alla cella 100h
-0CE1:0100 nop       inserisco nop
-0CE1:0101 int 20       inserisco int20 = fine programma
-0CE1:0103               premo invio
-r cx                       imposto la nuova lunghezza (3byte)
-CX 0002
:3                             3 byte

-w                           scrivi su disco
Scrittura di 3 byte in corso
-q
c:\>short.com

c:\>

Quindi per correggere un programma posso richiamarlo con debug, vedere la posizione delle righe errate e assemblare per inserire le nuove istruzioni.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.