A good answer might be:

lui  $8,0x1000      # $8 is base register
sb   $9,3($8)       # least significant byte
srl  $9,$9,8        # move next byte to low order
sb   $9,2($8)       # bits 8-15 
srl  $9,$9,8        # move next byte to low order
sb   $9,1($8)       # bits 16-23 
srl  $9,$9,8        # move next byte to low order
sb   $9,0($8)       # most significant byte

Tape Writer

The least significant byte of the register is written to memory first because it is already where the sb instruction needs it. Then the remaining bytes of $9 are shifted into the right-most byte one by one and written to memory. Here is a complete version of the program:

## endian.asm
##
## copy $9 to memory in big-endian order
##
## Register Use:
## $8  --- first byte of the tape buffer
## $9  --- 4-byte integer

      .text
      .globl  main

main: 
      lui  $9,0x1234      # put data in $9
      ori  $9,0x5678      #
      lui  $8,0x1000      # $8 is base register
      sb   $9,3($8)       # least significant byte
      srl  $9,$9,8        # move next byte to low order
      sb   $9,2($8)       # bits 8-15 
      srl  $9,$9,8        # move next byte to low order
      sb   $9,1($8)       # bits 16-23 
      srl  $9,$9,8        # move next byte to low order
      sb   $9,0($8)       # most significant byte

      .data
tape:                     # base register points here
      .space 1024         # tape buffer (1K bytes)
         
## End of file

The .space directive reserves bytes in memory, in this case 102410 bytes. Pretend this is the buffer from which a tape record will be written. The example program uses just the first four bytes.

QUESTION 5:

What is the symbolic address of the first byte of the .data section? What main storage address will it have at run time?