Krin Yongvongphaiboon
Krin Yongvongphaiboon

Reputation: 85

what is the difference between binary and binary coded decimal?

I'm studying encoders, which convert decimal to a code such as binary or binary coded decimal. What is binary coded decimal? Is it different from binary?

Upvotes: 1

Views: 6414

Answers (3)

dstaudacher
dstaudacher

Reputation: 556

(B)inary (C)oded (D)ecimal data usage is found mostly in Assembler programs. On mainframes, it was mostly used to save half a byte, typically to allow an 8-digit date to be stored in a (four-byte) fullword as YYYYMMDD, avoiding a full binary conversion while also keeping the date more "eye friendly" format (i.e. easier to see in a file dump).
IBM Mainframe Assembler provides a special instruction - MVO: (M)o(V)e with (O)ffset - enabling very easy conversion from Packed Decimal (i.e. COMP-3 in COBOL) to BCD format (and vice-versa) without using an algorithm.

Example: Assume a date of 31-DEC-2017 in YYYYMMDD (8-byte) format is to be converted to a 8-digit BCD format field (4-bytes).
(1) Use the PACK instruction to convert the 8-char DATE into 5-bytes PACKED
(2) Use the MVO instruction to move the 8 significant binary decimal digits to the BCD field
[Note length override "...BCD(5)...": so sign X'F' from PACKED is shifted into byte after the BCD field]
BCD now contains X'20171231'

SAMPLE CSECT
       [...]
(1)    PACK PACKED,DATE     C'20171231'  BECOMES X'020171231F' IN PACKED
(2)    MVO  BCD(5),PACKED  X'020171231F' BECOMES  X'20171231'  IN BCD        
       [...]
BCD    DS   XL4
PACKED DS   PL5
DATE   DC   CL8'21071231'

Upvotes: 2

dstaudacher
dstaudacher

Reputation: 556

Likewise, to convert an 8-digit BCD date to an 8-char DATE is a simple sequence of 3 instructions:
(1) Insert sign into rightmost byte of a 5-byte packed decimal field
[think of this as restoring the sign shifted out in step 2 "MVO BCD(5),PACKED" in the first example, above]
(2) Use the MVO instruction to extract the 8 binary decimal digits into the 5-byte packed decimal field
(3) Use UNPK to convert the 5-byte packed decimal field to an 8-char date
DATE now contains C'20171231'

SAMPLE CSECT
       [...]
(1)    MVI  PACKED+(L'PACKED-1),X'0F' INSERT SIGN (PACKED BECOMES X'........0F'
(2)    MVO  PACKED,BCD   X'20171231'  BECOMES X'020171231F' IN PACKED    
(3)    UNPK DATE,PACKED X'020171231F' BECOMES  C'20171231'  IN DATE 
       [...]
BCD    DC XL4'20171231'  
PACKED DS PL5
DATE   DS CL8

Upvotes: 0

Ac20
Ac20

Reputation: 51

It's very late but I saw this so I thought I might answer. So binary coded decimal is a way to denote larger binary numbers in decimal form, except each digit is represented in binary for example. 1111(binary) = 15(decimal) 1111(binary) = 0001 0101(BCD) so the bcd form of 1111 is two 4 bits numbers where the first 4 bit number in decimal is 1 and the second in decimal is 5, thus giving us 15. The way to calculate this is through an algorithm called double dabble.

Upvotes: 5

Related Questions