Tue, 10 Feb 2009, 23:37





A student writes:

	
	
	Dr. Patt:

	When calculating the address for LDB/LDW/STB/STW/etc., 
	what happen in cases like:

	R7 <- xFFFE

	LDW R0,R7,#1

	The LDW instruction means R0 <- MEM[R7 + SEXT(1) >> 1] = MEM[xFFFE + 2] 
	MEM[x0000]?

	Same question regarding something like

	R7 <- x0000

	LDW R0, R7, #-1

	That would mean R0 <- MEM[x0000 - 2] = MEM[xFFFE]? 



You are fine in both examples.  In the base machine, there is no notion of
privileged memory.  So you compute the address (with wraparound, since
this is a 16 bit machine) and use the resulting address.

By the way, wrap-around is one case.  What about ill-formed addresses.
That is, LDW R1,R2,#0 where R2 contains x4001.  This would cause an exception
since LDW must access an aligned word of memory.  However, exceptions are
for a later lab.  In lab 2, you don't have to worry about it.  All addresses
will be properly formed.

Yale Patt


	
	
	Thanks,
	<<name withheld to protect the student who addressed 1 of the 2 cases>>