Converisone da BCD a binario puro

di il
7 risposte

Converisone da BCD a binario puro

Ciao, mi sono ritrovato con questo problema quando ho dovuto scrivere una procedura per stampare la data e l'ora in assembly 8086. e vorrei sapere come si può realizzare una algoritmo in grado di compiere questa operazione

7 Risposte

  • Re: Converisone da BCD a binario puro

    Esattamente cosa vuoi fare? Quali sono i dati di partenza e cosa vuoi ottenere?

    Esistono varie forme di BCD (packed?) e la sorgente e la destinazione possono essere di diversa grandezza.

    Dai maggiori dettagli e prova comunque ad esprimere un tuo parere. Al forum si partecipa perché si presuppone che quello che si chiede sia stato comunque sviscerato e studiato.

    Sicuro che hai un dato BDC o è ASCII?

    https://it.wikipedia.org/wiki/Binary-coded_decimal

     Cosa intendi con “decimale”? Forse vuoi il valore "binario puro"?

    P.S. se puoi, correggi il titolo per permettere eventuali ricerche da parte di chi ha lo stesso problema …

  • Re: Converisone da BCD a binario puro

    Volevo scrivere un algoritmo che prenda in input un numero bcd packed e lo converta nel medesomo binario puro

    per fare ciò ho abbozzato questo algoritmo ma non capisco cosa ci sia di sbagliato

    bcd2dec: ;  [AL = Input number BCD] [AL = Output number decimal (binario puro)]
    
    
        ; Estrai la cifra BCD più significativa (MSD) e meno significativa (LSD)
        mov ah, al            ; Copia AL in AH
        shr al, 4             ; Shifta a destra di 4 bit per ottenere il MSD in AL
        and ah, 0x0F          ; Maschera per ottenere il LSD in AH
    
        ; Converti il MSD in decimale
        movzx ax, al          ; Zeros-extende AL in AX
        mov cx, 10            ; Divisore per la conversione
        mul cx                ; Moltiplica AX per 10
        add al, ah            ; Aggiungi il LSD convertito
    
        ; Output: AL contiene il numero decimale convertito
    ret
  • Re: Converisone da BCD a binario puro

    Questa istruzione

    movzx ax, al

    non è lecita.

    E poi la moltiplicazione cambia il valore in AH e quindi devi utilizzare un altro registro

       MOV DL,AL
       AND DL,0x0F
       AND AL,0xF0
       SHR AL,4
       MOV DH,10
       MUL DH
       ADD AL,DL
  • Re: Converisone da BCD a binario puro

    Ciao, nel mentre ho cambiato approccio e questo funziona..

    ora però non so come fare l'operazione inversa ovvero da binario puro a bcd

    ecco il codice funzionante

    bcd2dec: ;AL INPUT AH OUTPUT
    
    
    	mov	ah,al
    	shr	ah,4
    	and	al,0fh		;unpack bcd digits
    	aad			;convert to binary
    	mov	ah,al
    
        ; AH ora contiene il risultato binario in formato puro
        ret
  • Re: Converisone da BCD a binario puro

    L'istruzione

    AAD

    converte due cifre BCD unpacked (cosa che non era quello che volevi).

    Quindi hai dovuto prima convertire da packed a unpacked e poi usare AAD.

    Io ti avevo seguito sulla strada che avevi inizialmente esposto, la prossima volta attenderò un po' di più per rispondere in modo che tu possa proporre il tuo codice.

    Per la conversione serve un altro thread e comunque attendo un tuo codice.

  • Re: Converisone da BCD a binario puro

    Seguendo una logica inversa, questo dovrebbe assolvere al compito:

    dec2bcd: ;AL INPUT AH OUTPUT
    
            AAM			;Convert binary to unpacked BCD
    	    shl ah,4
    	    OR	AL,AH
    ret
  • Re: Converisone da BCD a binario puro

    Va bene, ovviamente per input compresti tra 0x00 e 0x63 (in genere andrebbe fatta una gestione degli errori)

    P.S. Come ti ho già detto prima (cosa che hai ignorato), usa thread diversi per argomenti diversi, per chi fa le ricerche nel forum

Devi accedere o registrarti per scrivere nel forum
7 risposte