### A good answer might be:

>     lui $13, 0x0060
>     ori $13, $13, 0x5000
>     lw  $12, 0xC($13)

# Alternate Sequence

The above `ori` instruction "fills in" the lower 16 bits of register $13 by doing this:

    original contents of $13: 0000 0000 0110 0000 0000 0000 0000 0000
    zero-extended immediate:  0000 0000 0000 0000 0101 0000 0000 0000
    result of bitwise OR   :  0000 0000 0110 0000 0101 0000 0000 0000

Other sequences of instructions also will work: Because the "upper half" of an address is 16 bits and the offset of the `lw` instruction is 16 bits, the two in combination can address any byte of memory.

The problem was to load $12 with the word at address 0x0060500C. Here is another way to do it: Split the address into halves: 0x0060 and 0x500C. Load the top half into $13 and use the bottom half as the offset.

>     lui $13, 0x0060
>     lw  $12, 0x500C($13)

Choose whichever method works best in the context of the rest of the program.

Since the `ori` instruction is used often with the destination register as one of the operands, there is a shorthand instruction in assembly language.

>     ori  $t,const  # assembles to the same machine
>                    # instruction as ori $t,$t,const

### QUESTION 11:

Do the following two assembly instructions assemble to the same machine instruction?

>     ori  $10,$10,0x00C4

>     ori  $10,$0, 0x00C4