.PACKED generates packed decimal data with two digits per byte.
Packed decimal data is useful in calculations requiring exact
accuracy. It is operated on by the decimal string instructions.
A packed decimal string is a contiguous sequence of bytes in
memory. It is specified by two attributes: the address A of
the first byte and a length L, which is the number of digits in
the string and not the length of the string in bytes. The bytes
of a packed decimal string are divided into two, 4-bit fields
(nibbles). Each nibble except the low nibble (bits 3:0) of the
last (highest-addressed) byte must contain a decimal digit. The
low nibble of the highest-addressed byte must contain a sign. The
representation for the digits and sign is indicated as follows:
Digit
or
Sign Decimal Hexadecimal
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
+ 10,12,14, or A,C,E, or F
- 15 B or D
11 or 13
The preferred sign representation is 12 for plus (+) and 13 for
minus (-). The length L is the number of digits in the packed
decimal string (not counting the sign); L must be in the range
0 to 31. When the number of digits is odd, the digits and the
sign fit into a string of bytes whose length is defined by the
following equation: L/2(integer part only) + 1. When the number
of digits is even, it is required that an extra 0 appear in the
high nibble (bits 7:4) of the first byte of the string. Again,
the length in bytes of the string is L/2 + 1.
The address A of the string specifies the byte of the string
containing the most-significant digit in its high nibble. Digits
of decreasing significance are assigned to increasing byte
addresses and from high nibble to low nibble within a byte.
Thus, +123 has a length of 3. The packed decimal number -12
has a length of 2.