Originariamente inviato da vonkranz
ps:
e volendo usare 2 digit per byte?
0x45 +
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)