Ciao a tutti,
esistono funzioni (meglio se con il codice sorgente visto che dovrei adattarlo ad un tipo specifico di processore) che permettono di fare operazioni (piu' che altro somme e sottrazioni) con numeri in formato BCD?
Grazie a tutti
Ciao a tutti,
esistono funzioni (meglio se con il codice sorgente visto che dovrei adattarlo ad un tipo specifico di processore) che permettono di fare operazioni (piu' che altro somme e sottrazioni) con numeri in formato BCD?
Grazie a tutti
...and I miss you...like the deserts miss the rain...
Non ci sono funzioni "standard" per questo tipo di operazioni. Comunque non è affatto difficile fare operazioni in BCD. Bisogna solo vedere su quanti digit devi operare e come li memorizzi (intendo dire se in byte o word più larghe).Originariamente inviato da vonkranz
esistono funzioni (meglio se con il codice sorgente visto che dovrei adattarlo ad un tipo specifico di processore) che permettono di fare operazioni (piu' che altro somme e sottrazioni) con numeri in formato BCD?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Dovrei stare nell'ordine di 6 digit e ogni digit corrisponde ad un byte (se ho capito bene la tua domanda e, soprattutto, le operazioni in BCD)Originariamente inviato da andbin
Non ci sono funzioni "standard" per questo tipo di operazioni. Comunque non è affatto difficile fare operazioni in BCD. Bisogna solo vedere su quanti digit devi operare e come li memorizzi (intendo dire se in byte o word più larghe).![]()
...and I miss you...like the deserts miss the rain...
Se sono solo somme e sottrazioni, non e' molto difficile ...
Se usi un byte per cifra (BCD non packed) allora e' ancora piu' semplice ...
Hai gia' scritto del codice e cosa non sai fare ...?
Ok (perché si potrebbero anche mettere 2 digit BCD in un byte).Originariamente inviato da vonkranz
ogni digit corrisponde ad un byte
Supponendo, come hai detto, che 1 byte = 1 digit BCD, la somma è semplice: sommi 2 byte con una normale addizione e se il totale è > 9, sommi ancora 6, azzeri i 4 bit alti e sai già implicitamente che il carry è 1 (per la somma sui digit più significativi).
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ti ringrazio.Originariamente inviato da andbin
Ok (perché si potrebbero anche mettere 2 digit BCD in un byte).
Supponendo, come hai detto, che 1 byte = 1 digit BCD, la somma è semplice: sommi 2 byte con una normale addizione e se il totale è > 9, sommi ancora 6, azzeri i 4 bit alti e sai già implicitamente che il carry è 1 (per la somma sui digit più significativi).
Suppongo che la procedura sia la stessa con la sottrazione.
ps:
e volendo usare 2 digit per byte?
...and I miss you...like the deserts miss the rain...
0x45 +Originariamente inviato da vonkranz
ps:
e volendo usare 2 digit per byte?
0x68 =
------
0xAD
ovviamente 0xAD non è BCD e bisogna "correggerlo" per ottenere 0x13 (con carry=1).
Si nota innanzitutto che la parte bassa è > 9 (basta fare una AND con 0x0F e verificare se è > 9). In tal caso si aggiunge 0x06.
0xAD +
0x06 =
------
0xB3
non è ancora BCD. Si nota che la parte alta è > 9 (e questo test va fatto comunque, sia che la parte bassa fosse già corretta o no).
Si fa quindi una AND con 0xF0 e si testa se è > 0x90. In tal caso si aggiunge 0x60
0xB3 +
0x60 =
-------
0x113
Risultato: 0x13 con carry a 1 (infatti 45 + 68 = 113)
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Coinciso, lineare e chiarissimo.
Ti ringrazio!
...and I miss you...like the deserts miss the rain...