Tue, 1 Oct 2013, 23:41

Another question that I think all of you need to be aware of.
A student writes:

> I have one more question actually. The program is supposed to start at
> x3000. I had to store some vectors in memory before that, so the "code"
> actually starts before x3000, but the actual instructions begins at x3000.
> Can I depend on whoever is testing the program to set the PC to x3000
> before running the program?
> Thank you.
> <<name withheld to protect the student who guarantees his program won't run>>

The short answer is: No, you can not.  In the real world of computers,
computers can only work on your program if the file containing your
program is presented to the computer in the way the computer expects 
it.  Otherwise the computer will process it as garbage.  

As I have said many times: computers do what you tell them to do, not what
you want them to do.  It is your job to make sure what you tell them to do
is what you want them to do.

In fact, we have already seen the example of adding two digits where the
computer was given the ascii codes to add, rather than the 2's complement
integers corresponding to those ascii codes.  If you give the computer ascii 
codes to add, the computer will treat those codes as integers, add them, 
producing garbage.

I think our instructions for the .bin file are pretty explicit.
The first line will contain the starting address, in this case x3000.  The
computer will put that address in the PC.  The rest of the lines contain
one instruction each which the computer will put into successive locations 
in the LC-3's memory, starting with the location whose address is in the PC.  
Then the computer will execute the program, starting with the instruction
that the PC points to.

That is the contract between the program and the computer.  Whether you 
write the program in machine language or you write it in JAVA and a JAVA
compiler translates it into the file that is presented to the computer,
the only way it can work is if both parties obey the same interface.

Finally, what about these vectors the student wants to put in memory.  
That one is easy.  Since TRAP x25 will halt the machine, the PC will never 
contain the address of the memory location after the location containing 
the TRAP x25 instruction.  So, just put the vectors there.  They will be 
in memory, readily accessible, but the PC will never get there so they will 
never be executed, and so will not produce garbage.

A picture (Suppose the TRAP x25 instruction is at location x3054):

x3054: 1111 0000 0010 0101
x3055: a vector to be used
x3056: another vector to be used
x3057: another vector to be used
x3058: another vector to be used
x3059: another vector to be used


Good luck.
Yale Patt