Assignment 4, due Jun 21
On every assignment, write your name legibly as it appears on your University ID card! Homework is due on paper at the start of class on the day indicated (Tuesday or Thursday). Exceptions will be made only by advance arrangement (excepting "acts of God"). Late work must be turned in to the TA's mailbox (ask the CS receptionist in 14 MLH for help). Never push homework under someone's door!
a) The program uses R8 to store the variable n. The choice of R8 was somewhat arbitrary — that is, the program would have worked just as well if any of several other registers had been used, but there are others that cannot be used to hold n. Which registers cannot be used? (Hint: Read Chapter 5, or experiment and see what happens) (0.5 points)
By convention, Hawk monitor routines may wipe out R3 to R7, and R1 and R2 are used in calls to monitor routines. So, none of R1 to R7 are available for long-term storage of values needed by the main program.
b) The program skeleton contains a loop. That loop ends with a CMPI instruction followed by a BLE instruction. What change to the CMPI instruction would you need to make if you changed the BLE to BLT? (0.5 points)
Make the loop end as follows:
CMPI R8,20 BLT LOOP
That is, we replaced (n <= 19) with (n < 20).
a) Which of these use PC-relative addressing? (0.5 points)
The right most (using a LOAD) definitely does. and the middle one (using a LEA) arguably does, since it computes an effective address by adding a constant to the PC.
b) Why is the ALIGN directive needed in the rightmost alternative? (0.5 points)
Because the instructions of the program above it occupy a mix of words and halfwords and we have no idea whether the location counter is divisible by 4. Words on the Hawk (such as the value at PHELLO) need to be aligned, which is to say, the locaiton counter must be divisible by 4 before they are assembled into memory.
c) In the discussion of PC-relative addressing, the expression X-(.+4) shows up as the displacement for the LEA instruction. Where did the +4 come from. That is, why isn't the displacement just X-.? (0.5 points)
The assembler computes the operand values before assembling them into memory, so the expression X-(.+4) is evaluate first and then the results are formed into bytes and words in memory. The CPU increments the program counter as it fetches each halfword of the instruction, and only later does it do arithmetic. So, between the time the LOAD instruction is fetched and the time the effective address is computed, the program counter will have been incremented by 4 from the value the location counter had when the expression was evaluated by the assembler.
In contrast, the only instructions on the Hawk that test the condition codes are branch instructions. There are no conditional variants of the JUMP instruction. This is justified by the fact that most conditional control structures in real programs are small loops.
Suppose your program had BGT THERE in it, and it used to work until you added a few more lines of code, and the next time you assembled the program you got an "out of bounds" error message because THERE was too far from the conditional branch instruction.
A question: What code could you use to replace BGT THERE that would accomplish the same behavior. Hint: It is more than 1 instruction and one of these instructions is a JUMP instruction. (0.5 points)
BLE NOTTHERE JUMP THERE NOTTHERE: