Questo breve excursus sull'assembler è tratto da una corrispondenza con un amico:
 

Caro Amico,

Visto che hai tanto piacere a conoscere l'ASSEMBLER, ti dico anzitutto che per costruire un programma in linguaggio macchina  non c'è bisogno di un assemblatore, infatti come ti ho scritto nella E-mail precedente puoi usare semplicemente il Debug del Dos presente nella directory C:\windows\command questo lo ho scoperto da solo molto tempo fa.....
Prima di tutto è opportuno che tu sappia come realmente si presenta un programma e cioè nella forma (Binary) :

INDIRIZZO                    HEX                                                                ASCII
1C6C:0100  5E C3 50 56 33 C9 33 DB-AC E8 59 23 74 19 3C 0D    ^PV3.3...Y#t.<..
1C6C:0110  74 15 F6 C7 20 75 06 3A-06 94 D2 74 34 00 5B 1C       t...u.:...t4.[..
1C6C:0120  75 E6 80 F7 20 EB E1 5E-58 C3 A1 69 D7 8B 36 6B      u.....^X..i..6k.
1C6C:0130  D7 C6 06 A7 D8 00 C6 06-A3 D8 00 8B 36 6B D7 8B    I ..............6k
1C6C:0140  0E 69 D7 8B D6 E3 42 51-56 5B 2B DE 59 03 CB 8B     .i....BQV[+.Y...
1C6C:0150  D6 C6 06 47 DB 00 E3 31-49 AC E8 D9 F6 74 08 49      ...G...1I....t.I
1C6C:0160  46 FE 06 47 DB EB EF E8-DB F9 75 04 FE 06 A3 D8     I F..G......u.....
1C6C:0170  3C 3F 75 05 80 0E A7 D8-02 3C 2A 75 05 80 0E A7       <?u......<*u....

Bene, tutto chiaro ??????

- Se non conosci i numeri esadecimali: fammelo sapere -

Ora le istruzioni elementari come Mov o Add vengono trasformate in un
codice binario .. ecco tutto .......

Comunque è molto difficile fare programmi in Debug.... Comunque per  tua
soddisfazione ti ho inviato un semplice programma Assembler  lungo 14 bytes
 

cioè 1/100 di K  = 0,01 K ...

Ti rimando alla prossima volta per spiegarti come funziona !!!!!!!!!!!!

Ok, studiatelo con Debug .... Alla prossima E-mail la soluzione !!!!!!!!!!!!!
[ Non funziona sotto  Win95.....]

P.S.

Testi per l' Assembler ce ne sono parecchi per iniziare usa quello che
vuoi.  Il migliore, per me, è un vecchio manuale per 8088 scritto da David
C. Willen e Jeffrey I. Krantz di Tecniche nuove : IBM PC programmazione del
microprocessore 8088.

il mio amico rispose:

Caro mE,
 
    ho preso visione del programma, vi ho trovato una chiamata all'INT
    17H, ho quindi visionato la spiegazione di questo INT sul mio manuale,
    ed ho scoperto che stampa un carattere. Una domanda, come mai anche a
    stampante accesa il tuo programma non stampa niente? Ho pensato di
    vedere a quale carattere corrispondesse il codice ASCII 36, è forse
    perchè corrisponde al simbolo del dollaro $ che è il delimitatore di
    stringhe standerd di ASM? Non ho capito molto bene la tabella che hai
    allegato. Spiegami queste perplessità, io penso di aver compreso che
    il tuo programma dovrebbe stampare il carattere $ di cui sopra sulla
    stampante 0 (LPT1?).

        Ti ringrazio anticipatamente per la tua disponibilità, Enrico.
 
Ed io:

Bravo, mi meraviglio per le tue Capacità !!!!!!!!!!!!!!!!!!!!!!!!!!

Ok, però con gli esadecimali non abbiamo molto dimestichezza, 36H (Hex) è
equivalente al decimale 54 è cioè nel codice ASCII al numero ' 6 '  e non a
' $ ' .
Il programma deve girare sotto MS-DOS riavviando Windows in tale modalità,
a me stampa il carattere 6, forse la tua stampante è ultra moderna e non
stampa tale carattere.....
La tabella è venuta male ma è così strutturata :

Indirizzo        Codice Hex                 Corrispondente ASCII

Molto semplice vero !!!!!!!!!!!!!!!!!

Bye my friend  Chameleon

Infatti il programma aveva le segenti istruzioni Assembler:

PUSH    DX
MOV     AH,00
MOV     DX,0000
MOV     AL,36
INT     17
POP     DX
INT     20
 

Il mio amico mi ha risposto con un programma in Basic che trasforma i decimali in esadecimali tramite funzioni a questo proposte. Eccolo:

FOR n = 0 TO 255
LPRINT n;
LPRINT " ";
LPRINT CHR$(n);
LPRINT " ";
LPRINT HEX$(n)
NEXT n

E lui:
 

      Un mio amico mi ha spedito queste due linee di codice:
 
      CLI

     JMP 101

 
     Da ciò che ho capito inizia un ciclo infinito dopo aver
     azzerato la tabella dei vettori di Interrupt. E' così?
 
 
    Ciao, scrivimi appena puoi, e se puoi,anche subito. Enrico.
 
 
Mentre io:
 

Si hai proprio ragione, ma il ciclo può non essere infinito nel momento in
cui all'indirizzo 101, vi è un istruzione di riabilitazione delle
interrupts: STI !!!!!!!!!!!!!!!!!!!

A proposito dopo il Jump che fa  il programma ???????????

Allora con gli esadecimali ci stiamo ferrando !!!!!!!!!!!!

Ti mando un programma che sono riuscito ad ottenere da un altro programma
che faceva apparire un messaggio grafico.... cerca di decodificarlo e
scrivi il tuo nome direttamente in assembler ( Il programma funziona anche
sotto Windows95 ) non consultare i manuali ma cerca, come me, di criptare
il codice

Ciao mE ............................. (Se vuoi la prossima volta possiamo
vedere come cambiare con ASM le voci delle Opzioni di un qualsiasi
programma, ad esempio all'opzione File sostituire Ciao così che quando
l'utente apre il word ha grande meraviglia e paura per quanto successo.
Altrimenti proponimi qualcosa di nuovo da fare !!!!!!!!).  A proposito :

                          Te li meriti  !!!!!!!!!!!!!!!
                                    |
                                    |
                                    |
                                    |
                                  \ | /
                               I complimenti
 

 

Continua la lezione .....