11/21/04

A student writes:

     Hello

     I finished my program but i kept on getting this
     one error "instruction
     reference label "(name of label)" that cannot
     be represented in a 9 bit signed
     PC Offset" when i assembled.  My program
     turned out to be 796 lines (probably
     too big) but I am fairly certain that it
     works after reading over it a few
     times.  Is there anything I can do about this
     or do i have to redo my program
     to fit so that I can assemble it?

     << name withheld to protect one who does not sign his email >>

A few things seem relevant to point out:

First, his statement: "I am fairly certain that it works after reading over it a few times." Riddle: What do we call a program whose author has just made the above statement? Answer: A program that does not work.

The software industry wastes billions of dollars a year (billions, I am told) because of bugs in programs whose authors "read them over a few times" and convince themselves their programs work. Does that mean you should not go over your program by hand? Of course not. Should you trace your program by hand? Sure. [And, you do know what "trace" means, right?]

BUT that is not enough. That is why we have a Simulator and why we urge you to test your program on the Simulator by stepping through it, inserting values, testing results of instruction execution, using breakpoints where useful, etc. Testing should involve as best as you can the "corner cases," that is, the data values where your program could screw up even though on nice values, everything is fine. For example, testing whether three lengths form a triangle. If the sum of the smaller two are larger than the largest, voila! A triangle. How about the sides 2,2,4 or 0,4,4. Ooops! The operative word in the test was "larger" and 4 is not larger than 4.

Anyway, I digress. Back to the student's question.

Second, 796 lines. Wow! That is long. He says "probably too big." Yeah, I guess so. We will not criticize a program that is too long in 306, but you will have to use instructions that "work" in that situation. You have 15 opcodes. Some don't care about where the data is, others do. You need to use those instructions that take all of this into account.

Third, "Do I have to redo my program to fit so I can assemble it?" No. You have two choices. (1) Use instructions appropriate to the situation you are in. Look at the instruction presenting the problem. Ask yourself: why is it presenting a problem? Is there any way to get around the problem? ...and act accordingly. Or, (2) Ask yourself, is there an easier way to do the whole job that does not take 796 lines. ...and act accordingly.

Good luck.

Yale Patt