+1 (315) 557-6473 

Implementing a linear feedback shift register in MIPS assembly homework help

The assignment is divided into three parts. The first part deals with implementing a function to compute the next state of an LFSR given the current state. The calculation is based on a polynomial function for the LFSR taps. The second part deals with counting all the possible states available in the LFSR before it cycles. The last part deals with using the developed LFSR function to write a program that simulates a guessing game. The program developed by our MIPS assembly homework help tutors generates a random number and allows the user to enter a guess. If the number is guessed correctly the game ends, otherwise, the program gives a hint about the relative position of the answer.
Table Of Contents
  • Polynomial Functions for a Linear Feedback Shift Register

Polynomial Functions for a Linear Feedback Shift Register

# Problem 1 code # Function to compute the next state of an LFSR .data title: .asciiz "Problem 1.\n" message: .asciiz "\nLFSR output state for the input " state1: .asciiz "0x00000001: " state2: .asciiz "0xdeadbeef: " state3: .asciiz "0x400439a0: " state4: .asciiz "0x00000000: " .code .globl main # main function main: la $a0,title syscall $print_string li $a0,0x00000001 # testing start state 0x00000001 jal LFSR la $a0,message syscall $print_string la $a0,state1 syscall $print_string move $a0,$v0 # move output lfsr state to a0 for printing syscall $print_int li $a0,0xdeadbeef # testing start state 0xdeadbeef jal LFSR la $a0,message syscall $print_string la $a0,state2 syscall $print_string move $a0,$v0 # move output lfsr state to a0 for printing syscall $print_int li $a0,0x400439a0 # testing start state 0x400439a0 jal LFSR la $a0,message syscall $print_string la $a0,state3 syscall $print_string move $a0,$v0 # move output lfsr state to a0 for printing syscall $print_int li $a0,0x00000000 # testing start state 0x00000000 jal LFSR la $a0,message syscall $print_string la $a0,state4 syscall $print_string move $a0,$v0 # move output lfsr state to a0 for printing syscall $print_int syscall $exit # LFSR function with the taps: # x^24+x^23+x^21+x^20+1 # the input is taken from $a0 # the output is in $v0 LFSR: li $t0,0x00D80000 # mask to use for the taps andi $t1,$a0,1 # test LSB srl $v0,$a0,1 # lfsr >>1 beqz $t1,skip xor $v0,$v0,$t0 # xor tap mask skip: jr $ra # return to the caller # Problem 2 code # Program to compute the number of states of an LFSR .data title: .asciiz "Problem 2.\n" result: .asciiz "\nNumber of states: " .code .globl main # main function main: la $a0,title syscall $print_string li $s0,0 # count=0 li $s1,0x00000001 # initial=0x00000001 move $a0,$s1 # state=initial do: # do { jal LFSR move $a0,$v0 # state=LFSR(state) addi $s0,$s0,1 # count ++ bne $a0,$s1,do # } while (state!=initial) la $a0,result syscall $print_string move $a0,$s0 # move resulting count to a0 for printing syscall $print_int syscall $exit # LFSR function with the taps: # x^24+x^23+x^21+x^20+1 # the input is taken from $a0 # the output is in $v0 LFSR: li $t0,0x00D80000 # mask to use for the taps andi $t1,$a0,1 # test LSB srl $v0,$a0,1 # lfsr >>1 beqz $t1,skip xor $v0,$v0,$t0 # xor tap mask skip: jr $ra # return to the caller # Problem 2 code # Program that allows the user to guess a random number 7 times .data title: .asciiz "Problem 3.\n" prompt1: .asciiz "\nPlease enter a name: " prompt2: .asciiz "\nPlease enter your guess for the random number: " win1: .asciiz "Congratulations " win2: .asciiz ", you guessed the number correctly!\n" toohigh: .asciiz "Your guess was too high " toolow: .asciiz "Your guess was too low " ending: .asciiz "!\n" fail1: .asciiz "\nYou have used all seven guesses " fail2: .asciiz "!\nThe random number is: " name: .space 100 .code .globl main # main function main: la $a0,title syscall $print_string la $a0,prompt1 # 1. ask for a name syscall $print_string la $a0,name # point to place to read string li $a1,100 # max number of chars to read syscall $read_string # read name from user syscall $random # 2. call random and set as the initial state move $s1,$v0 # 3. generate a number between 0 and 127 li $s0,7 # count=7 for repeating 7 times 1: move $a0,$s1 # set initial state jal LFSR # generate a random number move $s1,$v0 # use the output as input for next cycle addi $s0,$s0,-1 # decrement count bnez $s0,1b # repeat while it's not zero andi $s1,$s1,127 # restrict to 0-127 #4. repeat for 7 guesses li $s0,7 # count=7 for trying 7 times 2: la $a0,prompt2 # ask for a guess syscall $print_string syscall $read_int beq $v0,$s1,win # if the user guessed the number, he wins bgt $v0,$s1,high # see if it was higher than the random number low: la $a0,toolow # it was too low syscall $print_string b 3f high: la $a0,toohigh # it was too high syscall $print_string 3: la $a0,name # print user's name syscall $print_string la $a0,ending # print ending ! syscall $print_string addi $s0,$s0,-1 # decrement count bnez $s0,2b # repeat while it's not zero # 5. tell user 7 guesses were used and print number la $a0,fail1 # print all guesses have been used syscall $print_string la $a0,name # print user's name syscall $print_string la $a0,fail2 # print the random number message syscall $print_string move $a0,$s1 # print the random number syscall $print_int b end win: la $a0,win1 # 4a. user wins, congratulate him syscall $print_string la $a0,name syscall $print_string la $a0,win2 syscall $print_string end: syscall $exit # LFSR function with the taps: # x^24+x^23+x^21+x^20+1 # the input is taken from $a0 # the output is in $v0 LFSR: li $t0,0x00D80000 # mask to use for the taps andi $t1,$a0,1 # test LSB srl $v0,$a0,1 # lfsr >>1 beqz $t1,skip xor $v0,$v0,$t0 # xor tap mask skip: jr $ra # return to the caller