Next, we will consider how to make a program that adds 1 to any number between 0 and 9.First we need a way to represent the numbers 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9 with only the bit values 0 and 1. The following table shows how we will do it.
Table 1
number representation 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001Next we need a table indicating what the answer is for each possible number 0 to 9.
Table 2
number answer 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10Next, we rewrite this table as:
Table 3
number answer 0 01 1 02 2 03 3 04 4 05 5 06 6 07 7 08 8 09 9 10Next, we use table 1 to write table 3 with 1's and 0's. That is, we replace all 0's in table 3 with 0000, all 1's with 0001, and both 2's with 0010, etc. This gives us the following table.
Table 4
number answer 0000 00000001 0001 00000010 0010 00000011 0011 00000100 0100 00000101 0101 00000110 0110 00000111 0111 00001000 1000 00001001 1001 00010000Next, we write table 4 as data in memory.
Table 5
label address data comment (number) (answer) add1tabl 0000000001000000 0000000000000001 0000000001000001 0000000000000010 0000000001000010 0000000000000011 0000000001000011 0000000000000100 0000000001000100 0000000000000101 0000000001000101 0000000000000110 0000000001000110 0000000000000111 0000000001000111 0000000000001000 0000000001001000 0000000000001001 0000000001001001 0000000000010000This kind of table is called a lookup table because you can look up the answer in it. A lookup table can be made to do any function with a limited number of possible inputs. This function is called 'increment' (add 1) and has 10 possible inputs: 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9.
Next, we decide where the number to increment and the answer will be stored in memory.
label address data comment 0000000000000000 0000000000100000 start0000000000001000 0000000000000001 0000000000001001 number to increment 0000000000000010 0000000000000000 answerNext, we write the program. The program is a list of instructions that tell the processor how to manipulate data. That is, the program tells the processor from where and to where copy data.
label address data comment instr_1 0000000000001000 0000000000000001 from address 0000000000001001 0000000000001100 to address 0000000000001010 0000000000001111 'to' bits to copy to 0000000000001011 0000000000110000 instr.addr.and rot. instr_2 0000000000001100 0000000001000000 from address 0000000000001101 0000000000000010 to address 0000000000001110 0000000011111111 'to' bits to copy to 0000000000001111 0000000001000000 instr.addr.and rot. instr_3 0000000000010000 0000000000000000 from address 0000000000010001 0000000000000000 to address 0000000000010010 0000000000000000 'to' bits to copy to 0000000000010011 0000000001000000 instr.addr.and rot.
Page 26
Page 25 . . . Page 1 . . . Page 27