Hi Ron: This subject was covered a few weeks back, you may want to look in the archives for more detail. A quick answer is the binary value is being multiplied by 2 each loop. The carry output goes into a packed BCD digit string which is being decimal adjusted to create correct BCD values. For me the confusing part of this is the "adjBCD" (adjust BCD) routine. This is really very poorly labeled. (I guess I can't say it is poorly commented, as there are no comments on it). They are not adjusting the BCD value after an add/shift, but before it. If this was my code I would label the routine "preadjBCD" to indicate it readies the word for a multiply by 2. Note: do not attempt to use this code fragment for general purpose BCD adjustment, it only works when you are multiplying by 2. [Dmitry Kiryashov had a very good version of a 4-byte Binary to BCD routine he posted a few weeks back which uses the same principles. While you can find it in the archives I will also forward it to you off list.] >Hi -- I'm having difficulty trying to discover the underlying >concept/algorithm to this conversion method (B16TOBCD.ASM). I'd >appreciate some help in getting started with it. I may need to be >walked through a bit of the code too. Thanks. > >Ron