Numeri da tastiera da 00 a 99

di il
5 risposte

Numeri da tastiera da 00 a 99

Ciao, ho creato questo codice funzionante per ottenere da tastiera un numero da 0 a 9 ma non so come fare per ottenerne uno da 00 a 99 come si può fare?

getNB: ;[AL = output number]
getNB_loop:
     xor ah,ah
     int 16h
	 cmp al,'0'  ; verifica se l'input è minore di 0
     jb getNB_loop
     cmp al,'9'  ; verifica se l'input e minore di 9 
     jbe getNB_sec  ; ma siamo sicuri essere maggiore o uguale a 0
getNB_sec:
     mov ah,0x0E	; The function to display a chacter (teletype)| stampa il numero
     mov bh,0x00	; Page number                                 |
     mov bl,0x07	; Normal text attribute                       |
	 int 0x10
     sub al,'0' ; converte il numero da ascii in intero
	 mov ah,0
ret

5 Risposte

  • Re: Numeri da tastiera da 00 a 99

    Chiama questo codice come una proc due volte avendo cura di accumulare il risultato di di AL in un registro e di moltiplicare per 10 il risultato della prima chiamata. A blocchi

    • Azzera il registro DL
    • Chiama la tua proc (con una CALL)
    • Aggiungi AL a DL
    • Moltiplica DL per 10
    • Chiama la tua proc (con una CALL)
    • Aggiungi AL a DL

    Al termine avrai in DL il valore binario da 0 a 99.

    Oppure, in modo più generale (che vale anche per più di 2 cifre), puoi inserire i caratteri in un'area di memoria apposita (una stringa grande quanto vuoi che siano le cifre ammesse) e solo al RETURN, calcolare il valore risultante dalla stringa in un registro (o in due registri) in binario (una sorta di atoi del C).

  • Re: Numeri da tastiera da 00 a 99

    Grazie mille oregon

    quindi intendi così?

    xor dl,dl
    call getNB
    add dl,al
    mul dl
    call getNB
    add dl,al
    
  • Re: Numeri da tastiera da 00 a 99

    Se invece chiamo 2 volte la procedura per n da 00 a 99

    e sposto al in ah  e chiamo ancora otterrò un numero da 0000 a 9999 in AX… giusto?

     getAXn:
         call getB
    	 mov ah,al
    	 mov cl,ah   ;registro non utilizzato, lo uso per salvare ah 
         call getB	
         mov ah,cl
     ret
  • Re: Numeri da tastiera da 00 a 99

    22/12/2023 - Aless ha scritto:


    Grazie mille oregon

    quindi intendi così?

    xor dl,dl
    call getNB
    add dl,al
    mul dl
    call getNB
    add dl,al
    

    Manca la moltiplicazione per 10. E tieni presente che il risultato della moltiplicazione va sempre in AX. Quindi

    call getNB
    mov dl,0ah    10 in DL per la moltiplicazione
    mul dl        moltiplica 10 per AL in uscita dalla CALL
    mov dl,al	  risultato da al in dl per la prossima cifra
    call getNB
    add dl,al
  • Re: Numeri da tastiera da 00 a 99

    22/12/2023 - Aless ha scritto:


    otterrò un numero da 0000 a 9999 in AX… giusto?

    No, affatto.

Devi accedere o registrarti per scrivere nel forum
5 risposte