There are two reasons to have this group of instructions actually load the value that you're comparing.
The first is that the instruction word has a field that specifies an accumulator anyway, and the instruction set is very orthogonal so it only makes sense that a compare instruction also references an accumulator. The skip
instructions compare a value to zero, but, it makes sense to have some additional implicit operation that works with the selected accumulator. Therefore, the skip instruction is better thought of as a load instruction that imposes a condition on the following instruction. If you don't want that behaviour, just choose AC0. Many instructions treat AC0 a little differently. The SKIP instructions do not load into AC0.
The second reason is If you are going to compare something with a value, then it's likely going to be useful to be able to load that value as well. For example, It's handy for getting the minimum or maximum of several values, isn't it.
Or, say you're traversing a linked list: you need the pointer to the next node in some register, but you also need to know if that pointer is a valid one. You can now easily make arrange for an instruction to be executed only if the routine has or has not reached the end of the list. Exactly the same thing applies to, say, a null-terminated array such as a C-string.
Or, say you have something like a sum of money (made up of pounds, shillings, pence) saved in separate registers, then you would need to check if pence > 11, because then you need to subtract 12 from this number and increment shillings. Then you need to check if shillings > 19, and if so, subtract 20 from shillings and increment pounds. In a scenario like that, after the comparison, it's very useful to have the actual number of pence or shillings or whatever in the register so you can proceed to do the subtraction and increment.
An example from the ITS source code at src/chprog/ocm.470, line number 1070:
RMPPT2: SKIPLE T1,BOARD+BW(A)
SKIPLE T1,BOARD-BW(A)
What that's doing is loading BOARD+BW(A)
into T1
, unless that's a negative number or zero, then it loads BOARD-BW(A)
into T1
, and if that's also a negative number or zero, then the next instruction is skipped... You can see how this arrangement is useful for selecting one of many values.