In the BESM-6, there is an instruction (045) to add index registers, but not to subtract them, however, there is a nearby unused opcode 047, which is made synonymous to 045 (in fairness, that's true only in the kernel mode; in the user mode it traps as illegal).
Also, there are "branch if index is zero" (34) and "branch if index is not zero" (35), but not "branch if index is less than zero" (alternatively formulated as "branch if the MSB of the index is set"). However, there is a nearby unused opcode 36 which is made completely synonymous to 34.
This makes one to think that the unimplemented functionality was intended by the initial design (no references to confirm or deny it, unfortunately), but didn't make it into the hardware for one reason or another, be it physical space constraints, timing requirements, etc.
Are there any similar Western examples of an instruction set with obviously cut corners, or is this kind of mishap specific to socialist economy?
An answer could be in the form "Here's the instruction set of CPU X with an instruction with opcode A doing foo, but no instruction to do bar, which would be obvious to include for completeness/orthogonality; at the same time there is an unused opcode B close to A".
R1, which might not be a multiple of bytes per word, starting in the word pointed to byR2, looping through them would beR1 -= bytes_per_word; ++R2. IfR1is 0, we're done; ifR1has a high bit set, we need to addbytes_per_word backand handle the partial word. – Leo B. Feb 01 '19 at 20:06<=or<instruction to do any comparisons on ordered types. For example with<=we can doa == b,a > b,a < bas(a <= b) && (b <= a),not (a <= b)andnot (b <= a)respectively. Having==and!=is less useful. However as the BESM-6 has a shift instruction, I guess it'll be easy to do a "branch if negative". It also has other bitwise instructions like and, or, xor... which makes it a lot more useful than some educational architectures – phuclv Feb 07 '19 at 05:17