I'm sure it's not your fault, but a lot of spurious terms are being tossed about.
Your input data isn't hexadecimal, it's binary in the registers. Hex is the human-readable form here.
BCD is one decimal DISPLAY digit per byte, typically F0-F9 for digits 0 through 9.
Packed decimal is two decimal digits per byte, one per nybble.
Since I don't know precisely what format you'll want your data in, I'll give you a general algorithm which will put values 0 through 9 in a series of bytes. You can then OR in an additional left nybble if you think you need it.
DATA DEFINITIONS
digit3 … byte
digit2 … byte
digit1 … byte
digit0… byte
input … word
work … word
ALGORITHM
work = input;
digit0 = mod(work,10)
work = work / 10
digit1 = mod(work,10)
work = work / 10
digit2 = mod(work,10)
work = work / 10
digit3 = mod(work,10)
work = work / 10
(… continue if needed)
Now you have 4 digits in digit3, digit2, digit2, digit0 to use them as you will.
In other words, you're peeling digits off the right end, and in doing so shifting the input data to the right.