Ciao a tutti, ho realizzato per la scuola un programma in assembly che legge due valori tramite interupt 21 (funzione 01) e gli converte in numeri facendo semplicemente la sottrazione di 30h (si sa che i numeri nella tabella ascii iniziano dal 30h in poi). Ora in questo modo come dalla traccia si può fare un somma fino ad un max di 9d in quanto i numeri vanno da 0 a 9 sulla tabella ascii. La traccia chiedeva di elaborare un eventuale strategia per poter sommare numeri anche maggiori, voi avete qualche idea ? contate che non devo utilizzare comandi avanzati ma semplici comandi tipo i salti, somme e sottrazioni e l’interupt 21 per la lettura e la stampa di una stringa.
p.s: cercate di scrivere un testo piu che un programma o al massimo un codice commentato
p.p.s: nel caso vi potesse servire questo e il codice che utilizzo per la mia somma
Visualizza carattere per carattere la stringa di inserimento del primo numero:
0CBF:0100 BE4F01 MOV SI,014F
0CBF:0103 8A14 MOV DL,[SI]
0CBF:0105 80FA24 CMP DL,24
0CBF:0108 7407 JZ 0111
0CBF:010A B402 MOV AH,02
0CBF:010C CD21 INT 21
0CBF:010E 46 INC SI
0CBF:010F EBF2 JMP 0103
Acquisisce il primo numero sotto forma di carattere tramite l’interupt 21 in Al con la funzione 01:
0CBF:0111 B401 MOV AH,01
0CBF:0113 CD21 INT 21
Sposta il primo carattere da al in cl e lo trasforma in valore:
0CBF:0115 88C1 MOV CL,AL
0CBF:0117 80E930 SUB CL,30
Visualizza carattere per carattere la stringa di inserimento del secondo numero:
0CBF:011A BE7501 MOV SI,0175
0CBF:011D 8A14 MOV DL,[SI]
0CBF:011F 80FA24 CMP DL,24
0CBF:0122 7407 JZ 012B
0CBF:0124 B402 MOV AH,02
0CBF:0126 CD21 INT 21
0CBF:0128 46 INC SI
0CBF:0129 EBF2 JMP 011D
Acquisisce il secondo numero, sotto forma di carattere, tramite l’interupt 21 (in Al) con la funzione 01:
0CBF:012B B401 MOV AH,01
0CBF:012D CD21 INT 21
Trasforma il nostro secondo numero da carattere a valore per la somma:
0CBF:012F 2C30 SUB AL,30
Effettua la somma dei nostri due numeri:
0CBF:0131 00C1 ADD CL,AL
Ritrasforma la nostra somma numerica in carattere per la visualizzazione:
0CBF:0133 80C130 ADD CL,30
0CBF:0136 BEA501 MOV SI,01A5
Stampa la scritta “la somma è” per mettere in evidenzia la somma che stamperemo successivamente:
0CBF:0139 8A14 MOV DL,[SI]
0CBF:013B 80FA24 CMP DL,24
0CBF:013E 7407 JZ 0147
0CBF:0140 B402 MOV AH,02
0CBF:0142 CD21 INT 21
0CBF:0144 46 INC SI
0CBF:0145 EBF2 JMP 0139
Stampa il valore della nostra somma:
0CBF:0147 B402 MOV AH,02
0CBF:0149 88CA MOV DL,CL
Ritorna al sistema operativo:
0CBF:014B CD21 INT 21
0CBF:014D CD20 INT 20
Grazie in anticipo,
Guylmaster.