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