Trasfornazione numero

di il
33 risposte

33 Risposte - Pagina 2

  • Re: Trasfornazione numero

    Ma se scrivi

    mov al, 30h
    mov dl, al

    in al ci sarà SEMPRE 30h ovvero lo '0' !
  • Re: Trasfornazione numero

    Ti ringrazio davvero per il tempo che mi stai dedicando..
    Ora l'output varia a seconda il numero che gli dò, un passso avanti, ma mi dà come output un carattere ASCII che non è un numero... Ad esempio se gli do 36(carattere ASCII "$"), invece di darmi 36, mi dà "?"




    ciao:
             mov al, numero
             mov bl, 10d    
             div bl
             cmp al,0h
             je fineprog
             add al, 30h
             mov dl, al    
             mov ah,02h
             int 21h
             mov ah, 4ch
             mov numero, ah
             jmp ciao
             
    fineprog:
               int 21h
  • Re: Trasfornazione numero

    Che pensi che succeda se scrivi

    mov ah, 4ch
    mov numero, ah

    ?
  • Re: Trasfornazione numero

    Mov ah, 4ch serve insieme ad int 21h ad arrestare il programma. Ho sbagliato a metterlo lì, ora l' ho messo nell' etichetta "fineprog" insieme all' int 21h.
    Adesso però, in output mi ci va un carattere ASCII (Solitamente una lettera minuscola) all'infinito. Ed il programma non si arresta mai.. Entra in loop infinito.
    ciao:
             mov al, numero
             mov bl, 10d    
             div bl
             cmp al,0h
             je fineprog
             add al, 30h
             mov dl, al    
             mov ah,02h
             int 21h
            mov numero, ah
             jmp ciao
             
    fineprog:
              
     mov ah,4ch
     int 21h
  • Re: Trasfornazione numero

    Ti ripeto quindi ... questa

    mov numero, ah

    cosa fa? Qual è il valore di ah in questo momento?
  • Re: Trasfornazione numero

    Ah dovrebbe contenere il resto della divisione, quindi lo metto in numero. Sbaglio qualcosa? :/
  • Re: Trasfornazione numero

    Ma ah in quel momento non contiene il resto della divisione.
  • Re: Trasfornazione numero

    Allora sposto il resto in numero subito dopo la div.
    Ora mi dà un output di: "dcccc" all' infinito.
    ciao:
             mov al, numero
             mov bl, 10d    
             div bl
             mov numero, ah
             cmp al,0d
             je fineprog
             add al, 30h
             mov dl, al    
             mov ah,02h
             int 21h
             
             jmp ciao
             
    fineprog:
              
     mov ah,4ch
     int 21h
  • Re: Trasfornazione numero

    Quando dividi ti devi assicurare che ah=0 e poi quando termina il ciclo devi visualizzare anche il resto come ultima cifra. Ovvero
    
    	ciclo:
    			mov ah, 0d
    			mov al, numero
    			mov bl, 10d
    			div bl
    			mov numero, ah
    			cmp al, 0d
    			je fineprog
    			add al, 30h
    			mov dl, al
    			mov ah, 02h
    			int 21h
    			jmp ciclo
    	fineprog:
    			mov dl, ah
    			mov ah, 02h
    			int 21h
    
  • Re: Trasfornazione numero

    Okay, funziona, ma se io dò 45 corrispondente del carattere "-" come output mi dà solo 4, ovvero il risultato della divisione, ma mi dovrebbe dare anche 5, ossia il resto. Come mai mi da solo il 4?

    Ti ringrazio con tutto il cuore dell' aiuto che mi stai dando, ci tengo tanto a fare un buon codice perchè è un progetto per scuola.
  • Re: Trasfornazione numero

    E infatti la parte dopo fineprog deve visualizzare il 5.
  • Re: Trasfornazione numero

    Ah, si giusto.
    ok, però non mi dà il 5, mi dà un altro carattere ASCII... il trifoglio. cioè mi dà il 4, seguito da un trifoglio. :O

    potrebbe essere che ho sbagliato qualcosa con il resto.
    ti allego l' intero codice.
    dati segment
        resto1 db 0h
        cifra1 db 0h
        cifra2 db 0h
        numero db 0h
        
        msg1 db "Inserisci delle cifre (0 per terminare): $"
        msg66 db "La somma corrisponde a: $"
        msg3 db "Il risulato corrisponde a: $"
    dati  ends
    codice segment
        assume cs: codice, ds: dati
    inizio:
        mov ax, dati
        mov ds, ax
        mov ax, 0000h
        mov bx, 0000h
        mov numero, 0h
        lea dx, msg1
        mov ah, 09h
        int 21h
    
    comincia:
        call inse
        cmp al, 0h
        jne comincia
     
    
      
            mov bl,dl
             mov AH,02h
             mov DL,13
             int 21h
             mov AH,02h
             mov DL,10
             int 21h
    
      
        lea dx, msg3
        mov ah, 09h
        int 21h
           
             
             
        mov dl,numero
        mov ah, 02h
        int 21h                           ;output ascii
        mov ah, 4ch
        
        
      
        mov bl,dl
            mov AH,02h
            mov DL,13
             int 21h
             mov AH,02h
             mov DL,10
             int 21h
          
        lea dx, msg66
        mov ah, 09h
        int 21h
     
     
    ciclo:
             mov ah, 0d
             mov al, numero
             mov bl, 10d
             div bl
             mov numero, ah
             cmp al, 0d
             je fineprog
             add al, 30h
             mov dl, al
             mov ah, 02h
             int 21h
             jmp ciclo
       fineprog:
             mov dl, ah
             mov ah, 02h
             int 21h
    
    
      
    inse proc near
          mov ah, 01h
          int 21h
          sub al, 30h
          add numero, al
          ret
       
          endp
    codice ends
    end inizio
  • Re: Trasfornazione numero

    No ... mi ero dimenticato io una linea ... deve essere
    
    fineprog:
             add ah, 30h
             mov dl, ah
             mov ah, 02h
             int 21h
    
    anche se era evidente ...
  • Re: Trasfornazione numero

    Ah si, certo aggiungere 30h al resto in modo da avere un carattere compreso tra 0 e 9. Ok funziona tutto, solamente se dò un valore superiore a 100 non và giustamente, perchè il quoziente supera il 9..
  • Re: Trasfornazione numero

    Infatti questo codice funziona solo fino a 99. E in questo caso sarebbe meglio scrivere
    
    			mov ah, 0d
    			mov al, numero
    			mov bl, 10d
    			div bl
    			add ax, 3030h
    			push ax
    			mov dl, al
    			mov ah, 02h
    			int 21h
    			pop ax
    			mov dl, ah
    			mov ah, 02h
    			int 21h
    
    Se il programma deve lavorare anche con valori maggiori di 99, deve essere modificato
Devi accedere o registrarti per scrivere nel forum
33 risposte