Help con numeri a 16 bit

di Anonimizzato12484 il
12 risposte
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

  • 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.
  • 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... -.-
  • Prova tu a scrivere in base ai miei suggerimenti ... come da regolamento ...
  • Dichiaro un buffer
    BUFF DB 20h

    ??
  • 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
  • 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.
  • 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?
  • 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?
  • No che non lo è ... a che serve?

    Hai capito che il risultato dell'input dopo la INT 21h è nel buffer in formato ASCII?
  • Quindi MOV [CODICE_NUM1],buffer ???
  • 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