= Solution
<SP-relative addressing> forms an effective memory address by adding an offset to the <stack pointer>. It accesses local variables, saved <processor registers> or other stack-frame data without dedicating a separate base <processor register> for each object. The supplied reference gives word-aligned SP-relative offsets from $0$ to $1020$, which corresponds to an eight-bit nonnegative field scaled by four.
In the modified <datapath>, select the <stack pointer> for the unshifted <ALU> input, the instruction <immediate operand> for the <barrel shifter> input, and <ALU> addition. The effective address can then be \b[$\mathrm{SP}+(\mathrm{imm}\ll s)$]. Scaling the <immediate operand> changes the reachable displacement range without storing a larger <immediate operand>. For example, an eight-bit field shifted by two reaches offsets through $255\times4=1020$; shifting it by four reaches through $4080$, but only on a sixteen-byte grid. Larger range and finer address granularity are different properties, so the extra reach is not free arbitrary-byte addressing.
The parallel layout cannot feed a shifted <immediate operand> directly into its address-producing <ALU> in the same pass. The serial layout can. The actual <immediate operand> width and permitted shift encodings of a new instruction must be specified; the question does not fix them, so no particular enlarged instruction encoding is implied.
Back to article page