(SR-52) Binary-to-Decimal conversion - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: Not HP Calculators (/forum-7.html) +--- Forum: Not remotely HP Calculators (/forum-9.html) +--- Thread: (SR-52) Binary-to-Decimal conversion (/thread-14377.html) (SR-52) Binary-to-Decimal conversion - SlideRule - 01-17-2020 04:49 PM   Binary-to-decimal number conversion, often needed when working with digital equipment, can require laborious raising to powers and addition. This program, designed for an SR-52 calculator, provides a convenient method of converting 8-, 16-, 24-, and 32-bit words to their decimal equivalents.   To use the program, binary words are entered into the calculator eight bits at a time, most significant bit first. (Since the SR-52 has a 10-digit mantissa, the program ignores the first two digits entered and only operates on the last eight binary digits.) The user then presses the SR-52's user-defined key A, and the program displays the decimal.   Here's a typical 8 -bit conversion: ignored ┌┐ 1 1 1 1 1 0 1 0 1 0 ← 1) Enter binary number in display       └────────┘             8-bits         ← 2) Press A Key                     2 3 4  ← 3) Calculator Displays decimal equivalent   To obtain 16-, 24-, and 32-bit conversions, do the above operation for the first eight bits, but for each additional eight bits entered, press the user-defined key B, which will sum that 8-bit conversion with all previous conversions, to a maximum of 32 bits.   The conversion algorithm is shown here in flowchart [attachment=8020] and SR-52 program-listing form.  Location        Codes                    Keys 000 - 003  46 11 42 00    *LBL   A        STO    0 004 - 007  00 00 42 00    0        0        STO    0 008 - 011  03 42 00 04    3        STO    0        4 012 - 015  42 00 05 08    STO    0        5        8 016 - 019  44 00 05 01    SUM    0        5        1 020 - 023  94 44 00 04    +/-      SUM   0        4 024 - 027  46 79 01 44    *LBL   *6      1         SUM 028 - 031  00 04 43 00    0        4        RCL     0 032 - 035  00 55 01 00    0        ÷        1        0 036 - 039  95 42 00 01    =        STO    0        1 040 - 043  51 78 43 00    SBR    *5       RCL     0 044 - 047  04 75 43 00    4        -        RCL     0 048 - 051  05 95 42 00    5        =        STO    0 052 - 055  06 43 00 01    6        RCL     0        1 056 - 059  75 43 00 02    -        RCL     0        2 060 - 063  95 90 68 43    =        *if0    *8       RCL 064 - 067  00 06 90 67    0        6        *if0     *7 068 - 071  02 45 43 00    2        y"       RCL     0 072 - 075  04 95 44 00    4        =        SUM    0 076 - 079  03 43 00 02    3        RCL     0        2 080 - 083  42 00 00 41    STO     0       0        GTO 084 - 087  79 46 67 43    *6      *LBL    *7      RCL 088 - 091  00 03 81 46    0        3        HLT     *LBL 092 - 095  68 43 00 06    *8      RCL     0        6 096 - 099  90 67 43 00    *if0    *7       RCL     0 100 - 103  02 42 00 00    2        STO    0        0 104 - 107  41 79 46 78    GTO    *6      *LBL    *5 108 - 111  75 93 05 54    -        .         5        ) 112 - 115  57 00 52 22    *fix     0        EE      INV 116 - 119  52 22 57 42    EE       INV     *fix    STO 120 - 123  00 02 56 46    0        2        *rtn    *LBL 124 - 127  12 42 00 00    B        STO    0        0 128 - 131  41 00 01 05    GTO    0        1        5   It works by performing repeated divisions by 10, splitting the dividend into integral and fractional parts, and then looking to see if the fractional part is a 1 or 0. If it is a 1, the program raises 2 to appropriate power and sums it into register 03. After the program has looped through eight bits, it recalls register 03 and halts. source: RCA Engineer, Engineering and Research Notes, Binary-to-decimal conversion program for a programmable calculator, 1977-08/09, pg.76, A.R. Campbell BEST! SlideRule RE: (SR-52) Binary-to-Decimal conversion - Thomas Klemm - 06-16-2022 06:54 AM TI-57 Code: 00   32 0  :  STO 0 01   32 1  :  STO 1 02     08  :  8 03   32 2  :  STO 2 04     19  :  C.t 05   86 0  :  Lbl 0 06   33 1  :  RCL 1 07     45  :  ÷ 08     01  :  1 09     00  :  0 10     85  :  = 11     49  :  Int 12     66  :  x=t 13   51 1  :  GTO 1 14   32 1  :  STO 1 15     55  :  × 16   33 2  :  RCL 2 17   34 2  :  SUM 2 18     85  :  = 19  -34 0  :  INV SUM 0 20   51 0  :  GTO 0 21   86 1  :  Lbl 1 22   33 0  :  RCL 0 23     81  :  R/S Example 1101 RST R/S 13. 11011001 RST R/S 217. HP-25 Code: 01: 23 00    : STO 0 02: 23 01    : STO 1 03: 08       : 8 04: 23 02    : STO 2 05: 24 01    : RCL 1 06: 01       : 1 07: 00       : 0 08: 71       : / 09: 14 01    : f INT 10: 15 71    : g x=0 11: 13 18    : GTO 18 12: 23 01    : STO 1 13: 24 02    : RCL 2 14: 23 51 02 : STO + 2 15: 61       : * 16: 23 41 00 : STO - 0 17: 13 05    : GTO 05 18: 24 00    : RCL 0 19: 13 00    : GTO 00 Example CLEAR PRGM 1101 R/S 13.00 11011001 R/S 217.00 (01-17-2020 04:49 PM)SlideRule Wrote:  … provides a convenient method of converting 8-, 16-, 24-, and 32-bit words to their decimal equivalents. I'm leaving that part as an exercise to the reader. RE: (SR-52) Binary-to-Decimal conversion - pauln - 06-17-2022 12:47 AM Great implementation for the TI-57 and HP-25. It took me a while to understand where the 8 was coming from (hint: 10 - 2 = 8) and more generally why this method works at all. Nit: in the TI-57 program, "0 x:t" can be replaced with "C.t" to save one step. RE: (SR-52) Binary-to-Decimal conversion - Thomas Klemm - 06-17-2022 06:48 AM (06-17-2022 12:47 AM)pauln Wrote:  It took me a while to understand where the 8 was coming from (hint: 10 - 2 = 8) and more generally why this method works at all. I've explained it here in case of the decimal-to-binary conversion. But it works similarly if 2 and 10 are swapped. Here are some programs for the general case n-to-10 or 10-to-n: (06-17-2022 12:47 AM)pauln Wrote:  Nit: in the TI-57 program, "0 x:t" can be replaced with "C.t" to save one step. Good catch. Thank you for the notification. I have adjusted the listing accordingly. The TI-57 was the first calculator I wrote programs for. A colleague at school kindly loaned it to me for a while. But in the end I got an HP-41CV and I have no regrets. RE: (SR-52) Binary-to-Decimal conversion - Thomas Klemm - 06-17-2022 07:37 AM Here's a variant for the HP-25 that uses one more step but only one instead of three registers: Code: 01: 23 00    : STO 0 02: 08       : 8 03: 21       : x<->y 04: 01       : 1 05: 00       : 0 06: 71       : / 07: 14 01    : f INT 08: 15 71    : g x=0 09: 13 19    : GTO 19 10: 21       : x<->y 11: 31       : ENTER 12: 31       : ENTER 13: 51       : + 14: 22       : Rv 15: 61       : * 16: 23 41 00 : STO - 0 17: 22       : Rv 18: 13 04    : GTO 04 19: 24 00    : RCL 0 20: 13 00    : GTO 00 RE: (SR-52) Binary-to-Decimal conversion - pauln - 06-17-2022 10:38 PM Another way of looking at this method is to notice that it transforms the value in register 0 from: $$a_0 + a_1 \cdot 10 + \cdots + a_n \cdot 10^n$$ into $$a_0 + a_1 \cdot 2 + \cdots + a_n \cdot 2^n$$ To do so, it transforms $$10^k$$ into $$2^k$$ using the following general identity: $$a^k - b^k = (a - b)(a^{k-1} + a^{k-2} \cdot b + \cdots + b^{k-1})$$ Applied to a = 10 and b = 2, we get: $$10^k - 2^k = 8 \cdot (10^{k-1} + 10^{k-2} \cdot 2 + \cdots + 2^{k-1})$$ This explains the 8 at the beginning of the program as well as the values in register 2 (initially 8 and then 16, 32, 64, ...). RE: (SR-52) Binary-to-Decimal conversion - Thomas Klemm - 06-18-2022 05:23 AM (06-17-2022 10:38 PM)pauln Wrote:  I'm guessing this forum doesn't support Latex-like formatting for math expressions ? A search in the Test forum with the keyword latex gives currently the following list: Examples $$a_0 + a_1 \cdot 10 + \cdots + a_n \cdot 10^n$$ $a_0 + a_1 \cdot 2 + \cdots + a_n \cdot 2^n$ \begin{align} a^k - b^k &= (a - b)\left(a^{k-1} + a^{k-2} \cdot b + \cdots + b^{k-1}\right) \\ \\ 10^k - 2^k &= 8\left(10^{k-1} + 10^{k-2} \cdot 2 + \cdots + 2^{k-1}\right) \\ \end{align} Hint: You can see the code if you quote a post. RE: (SR-52) Binary-to-Decimal conversion - pauln - 06-18-2022 05:36 AM (06-18-2022 05:23 AM)Thomas Klemm Wrote:  Hint: You can see the code if you quote a post. Thanks! I fixed the original post.