Name: Box: Date:
HW6 solution
-
(22 points) As discussed on pages 140–141 (Section 2.12 "Assembler"), pseudoinstructions are not part of the MIPS instruction set, but often appear in MIPS programs. For each pseudoinstruction in the following table, produce a minimal sequence of actual MIPS instructions to accomplish the same thing.
You may need to use
$at
for some of the sequences. In the following tables,BIG
refers to a specific number that requires 32 bits to represent andSMALL
to a number that can fit in 16 bits. You may need to refer to the most-significant/least-significant half ofBIG
in your answers. Unless otherwise specified assume all integers are signed.Pseudoinstruction What it accomplishes Actual instructions move $t0, $t1
$t0 = $t1
add $t0, $t1, $0
clear $t0
$t0 = 0
add $t0, $0, $0
li $t0, SMALL
$t0 = SMALL
addi $t0, $0, SMALL
li $t1, BIG
$t1 =big
lui $at mshBIG
ori $t1, $at, lshBIG
beq $t0, SMALL, L
if ($t0 == SMALL) goto L
addi $at, $0, SML
beq $at, $t0, L
beq $t1, BIG, L
if ($t1 == big) goto L
lui $at, mshBIG
ori $at $at lshBIG
beq $at $t1 L
Pseudoinstruction | What it accomplishes | Actual instructions |
---|---|---|
ble $t3, $t5, L |
if ($t3 <= $t5) goto L |
slt $at, $t5, $t3 beq $at, $0, L |
bgt $t3, $t5, L |
if ($t3 > $t5) goto L |
slt $at, $t5, $t3 bne $at, $0, L |
bge $t3, $t5, L |
if ($t3 >= $t5) goto L |
slt $at, $t3, $t5 beq $at, $0, L |
addi $t1, $t2, BIG |
$t1 = $t2 + big |
lui $at, mshBIG ori $at, $at, lshBIG add $t1, $t2, $at |
lw $t5, BIG($t2) |
$t5 = Memory at address $t2 + big |
lui $at, mshBIG ori $at, $at, lshBIG add $at, $at, $t2 lw $t5, 0($at) or, if the assembler can account for sign-extension of the LSH: lui $at, mshBIG add $at, $at, $t2 lw $t5, lshBIG($at) |