HP Forums

Full Version: hp41cx line number branching using indirect.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

Hi Folks.
With a 41(cx), can you not branch bockwards to a line number using a negative number stored in an indirect register? You can do this with virtually every other programmable HP on the planet (OK, maybe not with a 25). I can't seem to find any reference to it in volume 2 of the owners manual.

I'm trying to branch back 136 lines (from line 137 to line 1) using syntax as follows...

-136 sto 09

gto ind09

Upon execution it returns "nonexistant".
Any help appreciated.


I ran a short tetst using GTO IND with a register containing -10. It seems that the 41C ignores the sign and look for LBL 10 (in my case).

In your example, the 41C is looking for LBL 136, which of course is outside the range of valid labels.

I suugest using a jump to a label. This approach allows you to insert code without worrying about keeping count of the corrected number of lines to jump.


The HP-41 family does not include any capability of branching to a line number, or the "rapid reverse branching" of some earlier HP models.

However, the HP-41 has less need for such a feature. The main purpose of rapid reverse branching was to speed up loops by avoiding a label search. But the HP-41 compiles GTOs. When program execution first encounters the GTO, it finds the target label, and stores the address in the GTO instruction. On subsequent executions of that GTO, no label search is required.

Editing the program will decompile it.

I don't think RRB can be implemented by synthetic programming, because the RRB routine would have to read the program memory to determine the lengths of the program lines, and reading the program memory as data would "normalize" it, possibly destroying the program. Anyhow, use of synthetic programming for this would be much slower than the label search.

On the other hand, it's possible to implement either a "GTO line number" funcction or an RRB function by custom microcode. Aside from the time needed to develop the microcode, this would require
an MLDL/HEPAX/Clonix type of device to store the microcode.

However, such a microcode function would usually still be slower than using a LBL and compiled GTO, at least for reverse branches, because of the 41's variable length instructions. When the program pointer is at line 42, and you want to get to line 39, the only way to do that is to count forward from the beginning of the program. This is what the non-programmable functions "GTO .nnn" and BST do, and explains why BST is slow on large programs.

Thank you gentlemen for your help.

I suppose the need for RRB is somewhat negated by the fact there are infinite label names available with a 41. I was just trying to save steps and memory by not having to insert labels.

Anyway, thanks again and best regards, Hal

Another option, especially if the branching spans are constant and not variable, is to compute the jump distance, put it in alpha, do a RCL M and then a STO b, or such.

This allows for a direct movement of the program pointer and can really make it difficult to decode a program.

These ideas are described fairly well in the PPC ROM manual.