Numeri da tastiera da 00 a 99

di Aless il
5 risposte

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

  • 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).

  • Grazie mille oregon

    quindi intendi così?

    xor dl,dl
    call getNB
    add dl,al
    mul dl
    call getNB
    add dl,al
    
  • 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
  • 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
Devi accedere o registrarti per scrivere nel forum
5 risposte