11 10 09 08 07 06 05 04 03 02 01 00 ___________________________________ | | | | | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | |f/| | | | |/b| | | | | | | Opcode | Address | | | | | 6-bit F | 6-bit E |This group of instructions allows program counter relative jumps that are conditional on the value in the accumulator A. Bit 8, the f/b bit, determines whether the jump is forward (0) or backward (1). The destination address computation is as follows:
if f/b = 0 then dst = P + E else dst = P - EIn all cases, jumping loads dst into PC; if the conditional jump fails, PC is merely incremented by 1, as usual for sequential execution.
Jump if all bits of A are zero.
Jump if any bit of A is nonzero.
Jump if A is positive.
Jump if A is negative.
11 10 09 08 07 06 05 04 03 02 01 00 ___________________________________ | | | | | | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| | | | | Opcode | Address | | | | | 6-bit F | 6-bit E |This group of instructions allows indirect jumps to any location in memory.
Use E to address one of the first 64 memory locations, and load the contents of that location into P.
Use forward relative addressing to fetch the destination address.
The CDC 160 has no instruction to both transfer control to a function and save the return address. Therefore, the programmer must create this effect using an instruction sequence. The most common way to do this on early CDC machines follows the following model, coded assuming the hardware upgrades released with Serial Number 37 and up (and probably retrofitted into most of the other 36 machines):
x : 010010000000 - Load Forward Relative x+1: x+6 - (return address) x+2: 100001000000 - Store Indirect x+3: p - (destination return link) x+4: 111001000000 - Jump Forward Indirect x+5: p+1 - (destination address)Typical receiving and return sequences for the above calling sequence might look like:
p-1: 111001000000 - Jump Forward Relative p : - - (return address) p+1: ... - Entry Point ... ... - (function body) ... p+n: 111001000000 - Jump Forward Indirect : p-1 - (address of return jump)For short functions where the sign or zero/nonzero status of the accumulator is known, the jump to the return jump at location p+n can be coded using a relative jump for efficiency.