Help con numeri a 16 bit

di il
12 risposte

Help con numeri a 16 bit

Ciao a tutti!
Avrei bisogno di una mano perchè devo scrivere un programma che acquisisca due numeri compresi tra 0 e 64000 e non so come fare.
ho scritto questo ma non funziona:
FUNZIONE PROC NEAR
MOV AH,0AH
INT DOS
MOV [CODICE_NUM1],AX
RET
FUNZIONEENDP

come devo fare??
Avrei bisogno che mentre li scrivo me li stampi ovviamente!!!
Grazie a tuttiiiiiii

12 Risposte

  • Re: Help con numeri a 16 bit

    La funzione che usi prevede in input anche l'indirizzo del buffer in DS:DX preimpostato come nella seguente documentazione

    http://stanislavs.org/helppc/int_21-a.htm

    Una volta eseguito l'input dovrai convertire i valori ASCII in binario in un registro a 16 bit.
  • Re: Help con numeri a 16 bit

    Resci a farmi un esempio per favore? non sono molto pratico... sono alle prime armi e non riesco a capire molto bene...
    ti spiego, poi con questi due numeri devo calcolare i quadrati che ci sono in mezzo.
    esempio: se inserisco 1 e 10 mi deve restituire 4 e 9 perchè sono gli unici quadrtai compresi tra 1 e 10. e non da ke parte iniziare... -.-
  • Re: Help con numeri a 16 bit

    Prova tu a scrivere in base ai miei suggerimenti ... come da regolamento ...
  • Re: Help con numeri a 16 bit

    Dichiaro un buffer
    BUFF DB 20h

    ??
  • Re: Help con numeri a 16 bit

    Quello non è un buffer ... guarda bene il formato del buffer richiesto nella documentazione ...

    Leggi anche questa discussione

    http://stackoverflow.com/questions/13206644/i-dont-understand-how-to-use-interrupt-21-ah-0ah
  • Re: Help con numeri a 16 bit

    Forse ho capito.. può essere?
    bufferSize db 6 ; 5 char + RETURN dato che al massimo ho 64000 che è formato da 5 cifre
    inputLength db 0 ; number of read characters
    buffer db 6 DUP(0) ; actual buffer

    Then fill the buffer:
    mov ax, cs
    mov ds, ax ; ensure cs == ds
    mov dx, offset bufferSize ; load our pointer to the beginning of the structure
    mov ah, 0Ah ; GetLine function
    int 21h
  • Re: Help con numeri a 16 bit

    Così ottieni nel buffer le informazioni inserite da tastiera ma come sequenza ASCII

    Per ottenere il valore numerico in un registro dovrai convertire il valore ASCII in decimale.
  • Re: Help con numeri a 16 bit

    In questo modo quindi io ho nel buffer il valore ascii giusto?
    ora devo trovare il modo per convertirlo in numero decimale e poi lo devo mettere in un registro? e poi faccio l'analogo con il secondo numero? ho capito giusto?
  • Re: Help con numeri a 16 bit

    Ho scritto il seguente codice:

    CODICE_NUM1 DW ?
    LETTURA_NUM1 PROC NEAR mov dx, offset bufferSize mov ah, 0Ah ; GetLine function
    int 21h
    MOV [CODICE_NUM1],AX
    RET
    LETTURA_NUM1 ENDP

    però la riga MOV [CODICE_NUM1],AX è corretta? io il dato ora dove ce l'ho?
  • Re: Help con numeri a 16 bit

    No che non lo è ... a che serve?

    Hai capito che il risultato dell'input dopo la INT 21h è nel buffer in formato ASCII?
  • Re: Help con numeri a 16 bit

    Quindi MOV [CODICE_NUM1],buffer ???
  • Re: Help con numeri a 16 bit

    No ... guarda che non puoi programmare "a caso" in assembly. E' un linguaggio "complesso" e senza la preparazione adeguata non puoi andare da nessuna parte.

    Quando ti dico che i dati sono nel buffer in ASCII e vanno convertiti in binario in un registro, devi sapere bene cosa vuol dire in "ASCII" e che "convertire" significa adottare un algoritmo e un codice opportuno.

    Parti dal concetto di ASCII e trova l'algoritmo per convertire in decimale. Se non sai bene di cosa si parla vuol dire che le tue conoscenze di base non ti consentano per ora di affrontare questi esercizi.
Devi accedere o registrarti per scrivere nel forum
12 risposte