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
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)
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 deals with just the first four bytes,
but in a real program all 1K bytes of the buffer would be collected
before the buffer was written to tape.
What is the symbolic address of the first byte
of the .data
section?
What main storage address will it have at run time?