|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2005
Messaggi: 41
|
[ASSEMBLER] Problemi con un programma che effettua la somma
Ho scritto questo programma che effettua la somma tra due numeri che inserisce l'utente... il problema è sommare i due valori e stampare a video il risulato. Ho provato la soluzione che potete vedere nel programma senza successo
![]() Codice:
;questo programma riceve in ingresso due numeri ed effettua la somma per poi stampare il risultato a video INCLUDE utility.asm mystack SEGMENT STACK DW 40 DUP(?) mystack ENDS mydata SEGMENT messaggio BYTE 10,13,'Inserisci il primo numero[0-9]: ','$' messaggio2 BYTE 10,13,'Inserisci il secondo numero[0-9]: ','$' messaggio3 BYTE 10,13,'Il carattere inserito non Š valido... il programma verr… terminato...','$' messaggio4 BYTE 10,13,'La somma dei valori inseriti Š: ','$' a1 DWORD 0 a2 DWORD 0 mydata ENDS mycode SEGMENT start: MOV AX,SEG mydata MOV DS,AX MOV DX,OFFSET messaggio CALL video ;uso il registro CX come contatore delle lettere digitate dall'utente MOV CX,2 ;capta dalla tastiera i numeri che inserisce l'utente capta: CALL tastiera ;prelevo un valore inserito dall'utente ;controllo se l'utente ha premuto il tasto enter CMP AL,0DH JE errore ;converte il carattere in un numero ADD AL,-30H JL errore ;controlla se il carattere è un numero minore di 0 CMP AL,0 JL errore ;controlla se il carattere è un numero maggiore di 9 CMP AL,9 JG errore ;decrementa il contatore contenuto nel registro CX e salta indietro all'etichetta capta DEC CX CMP CX,0 JG mess2 JE somma ;visualizza il messaggio di errore errore: MOV DX,OFFSET messaggio3 CALL video CALL dos ;visualizza il messaggio che informa l'utente dell'inserimento del secondo valore mess2: MOV SI,OFFSET a1 MOV DS:[SI],AL MOV DX,OFFSET messaggio2 CALL video JMP capta ;effettua la somma dei i numeri inseriti dall'utente ;memorizza in a2 il secondo valore inserito dall'utente somma: MOV DI,OFFSET a2 MOV DS:[DI],AL ;visualizza il messaggio con il risultato MOV DX,OFFSET messaggio4 CALL video MOV AX,DS:[SI] ADD AX,DS:[DI] MOV DX,AX CALL video JMP dos mycode ENDS END start Codice:
;questo programma è stato scritto per mettere a disposizione due procedure che permettono al programmatore di stampare a video un messaggio contenuto nel registro selettore AL mycode SEGMENT tastiera PROC FAR MOV AH,01H INT 21H RET tastiera ENDP video PROC FAR MOV AH,09H INT 21H RET video ENDP dos LABEL FAR MOV AH,4CH INT 21H mycode ENDS |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
potresti dare qualche sintomo in piu'? 1 - Vedi le scritte a schermo? (guarda che il programma funziona in modalita TESTO); 2 - Riesci ad inserire i dati? 3 - Vedi un risultato ma e' sbagliato? 4 - Non parte proprio nulla? Comunque il ciclo di lettura da tastiera e' strano. Dalla conversione sembrerebbe che sia tua intenzione leggere un carattere alla volta, ma il resto del codice dice il contrario. Inoltre sarebbe opportuno far diventare la lettura una subroutine invece di contare il numero di chiamate mediante CX. Prova a postare qualche info in piu' High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:26.