# YOUR-NAME-HERE, DD/MM/YYYY ######################################################################## # .DATA # Here are some handy strings for use in your code. .data prompt_str: .asciiz "Enter a random seed: " result_str: .asciiz "The random result is: " ######################################################################## # .TEXT
.text main: # Args: void # Returns: int # # Frame: [...] # Uses: [...] # Clobbers: [...] # # Locals: # - ... # # Structure: # - main # -> [prologue] # -> [body] # -> [epilogue] main__prologue: begin # TODO: add code to set up your stack frame here main__body: # TODO: complete your function body here main__epilogue: # TODO: add code to clean up stack frame here end li $v0, 0 jr $ra # return 0; ######################################################################## # .TEXT .text add_rand: # Args: # - $a0: int value # Returns: int # # Frame: [...] # Uses: [...] # Clobbers: [...] # # Locals: # - ... # # Structure: # - add_rand # -> [prologue] # -> [body] # -> [epilogue] add_rand__prologue: begin # TODO: add code to set up your stack frame here add_rand__body: # TODO: complete your function body here add_rand__epilogue: # TODO: add code to clean up stack frame here end jr $ra ######################################################################## # .TEXT .text sub_rand: # Args: # - $a0: int value # Returns: int # # Frame: [...] # Uses: [...] # Clobbers: [...] # # Locals: # - ... # # Structure: # - sub_rand # -> [prologue] # -> [body] # -> [epilogue] sub_rand__prologue: begin # TODO: add code to set up your stack frame here sub_rand__body: # TODO: complete your function body here sub_rand__epilogue: # TODO: add code to clean up stack frame here end jr $ra ######################################################################## # .TEXT .text seq_rand: # Args: # - $a0: int value # Returns: int # # Frame: [...] # Uses: [...] # Clobbers: [...] # # Locals: # - ... # # Structure: # - seq_rand # -> [prologue] # -> [body] # -> [epilogue] seq_rand__prologue: begin # TODO: add code to set up your stack frame here seq_rand__body: # TODO: complete your function body here seq_rand__epilogue: # TODO: add code to clean up stack frame here end jr $ra ## ## The following are two utility functions, provided for you. ## ## You don't need to modify any of the following, ## but you may find it useful to read through. ## You'll be calling these functions from your code. ## OFFLINE_SEED = 0x7F10FB5B ######################################################################## # .DATA .data # int random_seed; .align 2 random_seed: .space 4 ######################################################################## # .TEXT .text seed_rand: # DO NOT CHANGE THIS FUNCTION # Args: # - $a0: unsigned int seed # Returns: void # # Frame: [] # Uses: [$a0, $t0] # Clobbers: [$t0] # # Locals: # - $t0: offline_seed # # Structure: # - seed_rand li $t0, OFFLINE_SEED # const unsigned int offline_seed = OFFLINE_SEED; xor $t0, $a0 # random_seed = seed ^ offline_seed; sw $t0, random_seed jr $ra # return; ######################################################################## # .TEXT .text rand: # DO NOT CHANGE THIS FUNCTION # Args: # - $a0: unsigned int n # Returns: # - $v0: int # # Frame: [] # Uses: [$a0, $v0, $t0] # Clobbers: [$v0, $t0] # # Locals: # - $t0: int rand # # Structure: # - rand lw $t0, random_seed # unsigned int rand = random_seed; multu $t0, 0x5bd1e995 # rand *= 0x5bd1e995; mflo $t0 addiu $t0, 12345 # rand += 12345; sw $t0, random_seed # random_seed = rand; remu $v0, $t0, $a0 jr $ra # return rand % n;