There are two BCD formats. Packed (what you describe) and unpacked (where only a single digit is stored per byte).
Unpacked seems to have the advantage that converting to ASCII is just a matter of setting two bits, and converting from ASCII is just a matter of masking those out.
I found this example very illuminating
sub AH,AH ; clear AH
mov AL,'6' ; AL := 36H
add AL,'7' ; AL := 36H+37H = 6DH
aaa ; AX := 0103H
or AL,30H ; AL := 33H
because aaa instruction clears the high nibble of AL, it works with either unpacked BCD or with ASCII (but always outputs BCD).
I found this example very illuminating
because aaa instruction clears the high nibble of AL, it works with either unpacked BCD or with ASCII (but always outputs BCD).http://service.scs.carleton.ca/sivarama/asm_book_web/Instruc... (page 8)
But iiuc aaa didn't make it in the transation to 64bit processors.