Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Assembly] somma di due numeri

    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.

  2. #2
    mamma mia
    ma che lingua è????
    ci credi che non ci ho capito un cavolo?
    MSI KT4V (MS-6712) AMD Athlon XP 2400+@2000 Mhz Vcore 1.65 Fsb 133 Multiplier 15 1x256 SDRAM PC2700 Ati Radeon 9100 Tv-Out Samsung SD1533D 14 Gb@5400 rpm (eMule power) Maxtor 6y080L0 80 Gb@7200 rpm

  3. #3
    Utente di HTML.it L'avatar di Corwin
    Registrato dal
    Jan 2002
    Messaggi
    584
    Ehm... non ti conviene farlo in assembler, compilarlo e guardare l'assembly ?
    I don't wanna have to shout it out / I don't want my hair to fall out
    I don't wanna be filled with doubt / I don't wanna be a good boy scout
    I don't wanna have to learn to count / I don't wanna have the biggest amount
    I don't wanna grow up

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    invece di usare caratteri usa direttamente i numeri, convertili in numeri semplicemente sottraendo 30h (o 48d) al carattere letto da tastiera, poi usi il classico trucchetto delle potenze di 10 per comporre il numero. Ad as:

    ha inserito 356
    num = 6*10^0 + 5*10^1 + 3*10^2

    per tenerlo in memoria puoi usare un registro a 32 bit (AX - EX) oppure una variabile di non so' quanti byte, fai te...

    nel tuo script salvi tutto in CL, la parte meno significativa a 8 bit del registro CX, quindi già ad usare CX puoi memorizzare numeri 0-255

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.