If you look again you will notice that the fifth figure of the instructions between the address part and the operation part is a zero, marked "index part." The index part is a decidedly sophisticated arrangement. The "ER 56" (which is still serving us as an example) possesses ten "index registers." They are storages each capable of noting a number that is as long as an address (a number with many digits). Let us assume that the number 0350 is stored in index register 7, known as I 7. And that an instruction arrives as follows:
We might suppose that because of this command, the contents of address 2141 would have to be brought into the accumulator. But no: the instruction first takes the number - in this case, 350 - from index register 7 and adds it to the address part, 2141; it is aiming at address 2491, therefore, to bring its contents to the accumulator.
Why? Can't the programmer give the right address at once without hocus-pocus?
Naturally it can. But the apparently complicated index procedure allows it in fact to do the job with less work. Let us return to that payroll. To work out the weekly stint of Duncan MacKenzie, the program most call up addresses 1007 to 1012. That is what we mad before. If we want to add up the working hours of Jonathan Martin, we need the contents of the addresses numbered 1013 to 1018. In this case a new program would have to be written out for Jonathan Martin, for we have to deal with addresses that are quite different from Duncan MacKenzie's.
But this is where the index register comes in handy. With its aid the MacKenzie program can also be applied to the work of Martin and to that of the hours worked by all other employees whose wages are calculated on the same scale as that applicable to Duncan MacKenzie.
Let us assume that we are using index register 3, briefly called "I 3." All instructions concerning the adding-up of working hours are therefore supplied with a "3" in their index part. In the address part, the addresses of Duncan MacKenzie are written: 1007 to 1012. The first I 3 is now set at zero. This makes no change in the addresses, and the program calculates the weeks performance by MacKenzie. When it has finished, a "6" is added to the content of I 3. Now the program picks up the addresses numbered 1013 (1007 + 6) to
1018 (1012 + 6) inclusive, namely those of Jonathan Martin. To calculate the performances of any other worker it is only necessary to add a six to the content of I 3. But the program itself remains unchanged.
In this way one program can be repeatedly used every week to work out the wages due to all the employees at the plant.
Previously we mentioned instructions of the kind the "ER 56" is accustomed to. Other machines obey other commands, though all computers have one thing in common; they have an operation part and an address part. In electronic computers which rejoice in having very rapidly accessible storages, the address part may be quite lengthy (for example, in Zuse's "Z 22"). In the "I.B.M. 650" two addresses are always set up; one refers to the number with which the calculation is to be made, and the other says where the next instruction is. (In the other machines the sequence of the instruction-addresses is always rigidly fixed in advance.) Some computers lacking accumulators are informed in two addresses where to find the two numbers which are to be added, multiplied or otherwise dealt with. Others again ... but no matter. There are a hundred different kinds of computers, and each one of them has its own instruction system. There's no need for you to be quite so well informed.
What should happen to the instructions in our program to make them fit for a computer to take notice of them? No doubt the best thing is to treat them at first as quite ordinary seven-digit numbers, convert them into pulses with the tape punch, and local them to the computer so that they will be taken care of in its core storages - say in addresses 3000, 3001, 3002 and so on. They will be in good hands there. But then what happens?
Instruction Unit >>>>