Ricevere in input numeri decimali[Risolto]

di il
15 risposte

Ricevere in input numeri decimali[Risolto]

Salve a tutti
Cercando di continuare di approfondire il linguaggio assembly 8086 vorrei sapere se è possibile prima di tutto poter creare un programma che riceva in input un numero decimale.
Grazie

15 Risposte

  • Re: Ricevere in input numeri decimali[Risolto]

    Naturalmente
    visto che non hai postato codice farò lo stesso.
    ti spiego il metodo.
    metodo per numero a 2 cifre
    accetti la prima cifra
    (la prima cifra deve restituire un byte compreso tra 30h e 39h,estremi inclusi,altrimenti la devi scartare perchè non è un numero.)
    sottrai a questo byte 30h
    moltiplichi il byte calcolato per 10h e lo conservi in un registro.
    accetti la seconda cifra
    (la seconda cifra deve restituire un byte compreso tra 30h e 39h,estremi inclusi,altrimenti la devi scartare perchè non è un numero.)
    sottrai a questo byte 30h
    aggiungi al byte che ti eri conservato la seconda cifra ricalcolata.
    per più cifre il trucchetto e grosso modo lo stesso.
  • Re: Ricevere in input numeri decimali[Risolto]

    Grazie
    Ma io mi riferivo ai numeri con la virgola in input...
    Forse sono io che non ho capito
  • Re: Ricevere in input numeri decimali[Risolto]

    L'input lo fai sempre nel buffer, come hai fatto fino ad ora, in ASCII.

    Si tratta poi di capire cosa ci devi fare con quel valore in quanto, se è coinvolto nei calcoli va prima convertito in un formato floating-point standard. E dopo il calcolo, per vedere il risultato, va convertito nuovamente in ASCII. Le conversioni ASCII/Floating-point e viceversa, non sono banali.

    Se lo devi solo visualizzare, allora utilizzi i dati ASCII direttamente dal buffer.
  • Re: Ricevere in input numeri decimali[Risolto]

    Proverò a fare qualche ricerca allora

    So solo che devo usare le variabili di tipo
    DoubleWord,QuadWord o TenByte
    in quanto queste dispongono del floating point...
  • Re: Ricevere in input numeri decimali[Risolto]

    Una cosa non ho ben capito..
    Quando effettuo l'input deve avvenire come faccio sempre con
    
    MOV AH,01H
    INT 21H 
    
    Oppure già qui cambia?

    Inoltre devo fare in modo che ad esempio il simbolo "."(punto) indica la parte dopo la vigola del numero?
  • Re: Ricevere in input numeri decimali[Risolto]

    DoubleWord QuadWord TenByte non c'entrano nulla con il Floating-Point.

    L'input lo puoi fare carattere per carattere come hai fatto fino ad ora, oppure puoi usare l'apposita funzione di input in un buffer

    AH = 0Ah - BUFFERED INPUT


    che è genericamente utilizzabile per inserire una stringa.

    Potrai scegliere l'input con il . o la , a seconda di come ti serve. Quella è una sequenza ASCII e la devi controllare tutta tu, non c'è nulla di automatico.
  • Re: Ricevere in input numeri decimali[Risolto]

    DATA SEGMENT PUBLIC
    	
    	DOM DB "Digita un numero decimale: ",'$'
    	RIS DB "Il numero digitato e': ",'$'
    	ACAPO DB 10,13,'$'
    	NUMERO DW ?
    	DIM EQU 10 ;dichiaro una costante per definire la lunghezza del buffer
    		
    DATA ENDS ;fine del segmento dei dati
    
    CODE SEGMENT
    
    	ASSUME CS:CODE,DS:DATA
    
    INIZIO:
    
    	;CARICO I DATI
    	MOV AX,DATA
    	MOV DS,AX 
    	
    	STAMPA MACRO FRASE
    		MOV AH,09H ;RICHIESTA DI STAMPA DI UNA FRASE
    		LEA DX,FRASE ;CARICO LA FRASE
    		INT 21H ;INTERRUPT CHE PERMETTE LA STAMPA 
    	ENDM ;FINE DELLA MACRO PER STAMPARE FRASE
    
    	STAMPA DOM ;STAMPA DELLA STRINGA RICHIAMANDO LA MACRO
    	
    	MOV AH,0AH ;RICHIESTA DI BUFFER
    	INT 21H ;interrupt che permette di eseguire il buffer
    	
    	;OFFSET 0 MAX NUMERO DI CARATTERI
    	;OFFSET 1 NUMERO DI CARATTERI
    	;OFFSET 2 REALE CONTENUTO DEL BUFFER
    	
    	BUFFER DB DIM DUP('') ;definisco un buffer formato da byte
    	
    	;RESTITUISCO IL CONTROLLO AL DOS 
    	MOV AH,4CH
    	INT 21H
    
    	
    
    CODE ENDS ;FINE DEL SEGMENTO DEL CODICE
    END INIZIO ;CHIUSURA ETICHETTA CHE INDICA INIZIO DEL PROGRAMMA
    Per ora ho scritto questo, solo che una volta che digito il numero e premo invio il programma non termina, cosa ho sbagliato?
    Il tasm non segnala errori...
  • Re: Ricevere in input numeri decimali[Risolto]

    Ma che ci fa il buffer dei dati in mezzo al codice??
  • Re: Ricevere in input numeri decimali[Risolto]

    Perchè tempo fa avevo chiesto come digitare in input una parola e avevo dichiarato il buffer li...

    http://www.iprogrammatori.it/forum-programmazione/assembly/input-una-parola-t24302.html
  • Re: Ricevere in input numeri decimali[Risolto]

    Beh, anche lì era sbagliato ...
  • Re: Ricevere in input numeri decimali[Risolto]

    Ho corretto il codice così :
    DATA SEGMENT PUBLIC
    	
    	DOM DB "Digita un numero decimale: ",'$'
    	RIS DB "Il numero digitato e': ",'$'
    	ACAPO DB 10,13,'$'
    	NUMERO DW ?
    	DIM EQU 10 ;dichiaro una costante per definire la lunghezza del buffer
    	BUFFER DB DIM DUP('') ;definisco un buffer formato da byte
    		
    DATA ENDS ;fine del segmento dei dati
    
    CODE SEGMENT
    
    	ASSUME CS:CODE,DS:DATA
    
    INIZIO:
    
    	;CARICO I DATI
    	MOV AX,DATA
    	MOV DS,AX 
    	
    	STAMPA MACRO FRASE
    		MOV AH,09H ;RICHIESTA DI STAMPA DI UNA FRASE
    		LEA DX,FRASE ;CARICO LA FRASE
    		INT 21H ;INTERRUPT CHE PERMETTE LA STAMPA 
    	ENDM ;FINE DELLA MACRO PER STAMPARE FRASE
    
    	STAMPA DOM ;STAMPA DELLA STRINGA RICHIAMANDO LA MACRO
    	
    	MOV DX, OFFSET BUFFER
    	MOV AH,0AH ;RICHIESTA DI BUFFER
    	INT 21H ;interrupt che permette di eseguire il buffer
    	
    	;OFFSET 0 MAX NUMERO DI CARATTERI
    	;OFFSET 1 NUMERO DI CARATTERI
    	;OFFSET 2 REALE CONTENUTO DEL BUFFER
    	
    	
    	
    	;RESTITUISCO IL CONTROLLO AL DOS 
    	MOV AH,4CH
    	INT 21H
    
    
    CODE ENDS ;FINE DEL SEGMENTO DEL CODICE
    END INIZIO ;CHIUSURA ETICHETTA CHE INDICA INIZIO DEL PROGRAMMA
    Il punto è che non mi fa digitare il numero è normale?
  • Re: Ricevere in input numeri decimali[Risolto]

    In questa linea

    BUFFER DB DIM DUP(' ') ;definisco un buffer formato da byte

    tra gli apici ci va uno spazio che non avevi messo ...
  • Re: Ricevere in input numeri decimali[Risolto]

    Ho corretto il codice mettendo uno spazio fra i singoli apici nel buffer e ora funziona...
    Adesso come devo procedere? Devo fare la conversione?

    Scusatemi se sono rompi scatole
  • Re: Ricevere in input numeri decimali[Risolto]

    In realtà i thread nel forum non dovrebbero essere delle discussioni infinite come in una chat.
    Il problema dell'input è chiuso e dovresti aprire un nuovo thread per la conversione.
    Comunque come ti ho detto la conversione non è banale e prima di aprire un nuovo thread dovresti informarti sulla questione dal punto di vista teorico.
Devi accedere o registrarti per scrivere nel forum
15 risposte