The Museum of HP Calculators

HP Forum Archive 21

[ Return to Index | Top of Index ]

15C programming question
Message #1 Posted by Eric Zoob on 27 Mar 2012, 2:03 p.m.

Routine A dimensions matrices A,B, and sets result to C. Routine E multiplies AxB.

Without the second (repeated) RTN on line 22, the program does not return to 000, but will continue through and multiply AxB. What am I doing wrong here?

001- 42,21,11 LBL A
002- 2
003- 36 ENTER
004- 2
005- 42,23,11 DIM A
006- 2
007- 36 ENTER
008- 1
009- 42,23,12 DIM B
010- 42,26,13 RESULT C
011- 42,16,1 MATRIX 1
012- 0
013-u 44 11 STO A
014- 1
015-u 44 11 STO A
016- 1
017- 16 CHS
018-u 44 11 STO A
019- 0
020-u 44 11 STO A
021- 43 32 RTN
022- 43 32 RTN
023- 42,21,15 LBL E
024- 45,16,11 RCL MATRIX A
025- 36 ENTER
026- 45,16,12 RCL MATRIX B
027- 20 Multiply
028- 43 32 RTN

Edited: 27 Mar 2012, 2:08 p.m.

      
Re: 15C programming question
Message #2 Posted by Kiyoshi Akima on 27 Mar 2012, 2:36 p.m.,
in response to message #1 by Eric Zoob

Step 20 follows the "do if true" paradigm of the conditional and looping commands. It does the STO, increments the counters, and skips the next step if it had gone past the matrix boundary.

            
Re: 15C programming question
Message #3 Posted by Eric Zoob on 27 Mar 2012, 8:57 p.m.,
in response to message #2 by Kiyoshi Akima

Thanks. I found it in the manual. That's a very nice feature, actually.

      
Re: 15C programming question
Message #4 Posted by Tom Sauntry on 27 Mar 2012, 8:29 p.m.,
in response to message #1 by Eric Zoob

Pardon my ignorance, but what are the lower-case "u"s preceding the 44 11 STO commands in the listing.

            
Re: 15C programming question
Message #5 Posted by gene wright on 27 Mar 2012, 8:53 p.m.,
in response to message #4 by Tom Sauntry

means they were keyed in while in USER mode.

Changes the behavior of some commands related to matrix, etc.

                  
Re: 15C programming question
Message #6 Posted by C.Ret on 28 Mar 2012, 2:41 a.m.,
in response to message #5 by gene wright

Bonjour,

This topic is a good reason, actually a good excuse, to practice and remind me some of my HP-15C's code.

That's how I read the proposed code and interprets its progress. Feel free to comment and report any oversight or misinterpretation.

  Key Code       MNEMOMICS              Merge Commands     Remarks

001-42,21,11 LBL A "A" Sub-program "A" 002- 2 2 003- 36 ENTER 004- 2 2 005-42,23,11 DIM A (2,2) DIM A Dimension Data Matrix A to 2x2 006- 2 2 007- 36 ENTER 008- 1 1 009-42,23,12 DIM B (2,1) DIM B Dimension Data Matrix B to 2x1 010-42,26,13 RESULT C Result in C Designates Matrix C for storing result 011-42,16, 1 MATRIX 1 Matrix Entry Restart entry from home position (1,1) 012- 0 0 013-u 44 11 STO A A(1,1) <-- 0 Matrix A Entry 014- 1 1 015-u 44 11 STO A A(1,2) <-- 1 016- 1 1 017- 16 CHS 018-u 44 11 STO A A(2,1) <-- -1 019- 0 0 020-u 44 11 STO A A(2,2) <-- 0 021- 43 32 RTN ............ step skiped since 'End of Matrix reached' (roll over) 022- 43 32 RTN End of "A"

023-42,21,15 LBL E "E" Sub-Program "E" 024-45,16,11 RCL MATRIX A 025- 36 ENTER ? ? ? 026-45,16,12 RCL MATRIX B 027- 20 × C <-- A × B Matrix Product 028- 43 32 RTN End of "E"

                        
Re: 15C programming question
Message #7 Posted by Luiz C. Vieira (Brazil) on 28 Mar 2012, 5:49 a.m.,
in response to message #6 by C.Ret

Hi;

I'd just add a few remarks, if you allow me to:

  Key Code       MNEMOMICS              Merge Commands     Remarks

001-42,21,11 LBL A "A" Sub-program "A" 002- 2 2 003- 36 ENTER 004- 2 2 (unnecessary) 005-42,23,11 DIM A (2,2) DIM A Dimension Data Matrix A to 2x2 006- 2 2 (unnecessary) 007- 36 ENTER (unnecessary) 008- 1 1 009-42,23,12 DIM B (2,1) DIM B Dimension Data Matrix B to 2x1 010-42,26,13 RESULT C Result in C Designates Matrix C for storing result 011-42,16, 1 MATRIX 1 Matrix Entry Restart entry from home position (1,1) 012- 0 0 013-u 44 11 STO A A(1,1) <-- 0 Matrix A Entry 014- 1 1 015-u 44 11 STO A A(1,2) <-- 1 016- 1 1 (unnecessary) 017- 16 CHS 018-u 44 11 STO A A(2,1) <-- -1 019- 0 0 020-u 44 11 STO A A(2,2) <-- 0 021- 43 32 RTN ............ step skiped since 'End of Matrix reached' (roll over) 022- 43 32 RTN End of "A"

023-42,21,15 LBL E "E" Sub-Program "E" 024-45,16,11 RCL MATRIX A 025- 36 ENTER ? ? ? 026-45,16,12 RCL MATRIX B 027- 20 × C <-- A × B Matrix Product 028- 43 32 RTN End of "E"

Step #4: after [ENTER] both X and Y registers already filled with 2.00, no need to enter again;

Steps #6 and #7: Same as above

Step #16: there is a copy of 1 still in the X-register, a single CHS suffices to let -1 in the X-register

And you are correct: step #25 is not needed.

Since the elements and the indexes for the matrices are not used after their contents are set, reusing them instead of introducing them back once they are still in the memory stack reduces the number of program steps. And allow the extra few bytes to be used in other programs.

Cheers.

Luiz (Brazil)

Edited: 28 Mar 2012, 5:52 a.m.

                              
Re: 15C programming question
Message #8 Posted by C.Ret on 28 Mar 2012, 3:14 p.m.,
in response to message #7 by Luiz C. Vieira (Brazil)

You are welcome ! :-)


[ Return to Index | Top of Index ]

Go back to the main exhibit hall