Instructions
Objective
Write a MIPS assignment to generate Bingo cards (using MARS).
Requirements and Specifications
In MIPS Assembly Language (Using MARS) do the following: Bingo Card Generator Write a program that will: prompt the user for the number of players (maximum of 2) prompt the user for the number of cards to generate for each player (maximum of 2) for each card for each player, generate a valid bingo card (4 columns and 4 rows) provide a menu for the user to select 1-which user/bingo card to display 2-to run a histogram on the bingo cards generated to see how many times each number between 1 and 75 appeared 3-exit I have a picture attached that will show the desired output. I would need a lot of comments throughout the code. Also as mentioned, programmer has to use MARS to make this program and should be in the format of data and text.
Screenshots of output
Source Code
.data
prompt_np: .asciiz "Please enter number of players: "
prompt_nc: .asciiz "Please enter number of cards per player: "
menu: .ascii "1. To select user/bingo card to display\n"
.ascii "2. To show histogram\n"
.asciiz "3. Exit\n"
prompt_ch: .asciiz "Please enter your choice: "
prompt_pn: .asciiz "Please enter player number (1 - "
prompt_cn: .asciiz "Please enter card number (1 - "
prompt_end: .asciiz "): "
err_nplayers: .asciiz "Invalid number of players. Please try again\n"
err_ncards: .asciiz "Invalid number of cards. Please try again\n"
err_choice: .asciiz "Invalid choice. Please try again\n"
err_player: .asciiz "Invalid player number. Please try again\n"
err_card: .asciiz "Invalid card number. Please try again\n"
bingo: .asciiz " B I N G O\n"
cards: .space 100 # space for a maximum of 2 players * 2 cards * each card of maximum 5*5 numbers
histo: .space 75 # space to save histogram
.text
# Program start
main:
# read number of players
read_nplayers:
la $a0, prompt_np # load address of prompt string
li $v0, 4 # syscall to print string
syscall # print the prompt
li $v0, 5 # syscall to read an integer
syscall # read the number of players
move $s0, $v0 # save number of players
blt $v0, 1, bad_nplayers # if not correct, print error
ble $v0, 2, read_ncards # if correct, read number of cards
bad_nplayers:
# print error message
la $a0, err_nplayers # load address of error string
li $v0, 4 # syscall to print string
syscall # print the error message
j read_nplayers # try again
# read number of cards
read_ncards:
la $a0, prompt_nc # load address of prompt string
li $v0, 4 # syscall to print string
syscall # print the prompt
li $v0, 5 # syscall to read an integer
syscall # read the number of cards
move $s1, $v0 # save number of cards
blt $v0, 1, bad_ncards # if not correct, print error
ble $v0, 2, generate_cards # if correct, generate cards
bad_ncards:
# print error message
la $a0, err_ncards # load address of error string
li $v0, 4 # syscall to print string
syscall # print the error message
j read_ncards # try again
generate_cards:
# generate cards for all players and fill histogram
la $s2, cards # point to start of cards
la $s3, histo # point to start of histogram
move $t0, $s0 # start with the number of players
ploop:
move $t1, $s1 # start with the number of cards
cloop:
li $t2, 24 # start with the number of numbers
nloop:
li $v0, 42 # syscall to generate a random number in a range
li $a0, 0 # generator number 0
li $a1, 75 # generate between 0 and 74
syscall # generate a random number
add $t3, $a0, $s3 # add to histo to get position of number
lb $t4, 0($t3) # load current count of number
addi $t4, $t4, 1 # increment count
sb $t4, 0($t3) # save new count
addi $a0, $a0, 1 # increment to get a number 1-75
sb $a0, 0($s2) # save in cards
addi $s2, $s2, 1 # advance to next space in array
addi $t2, $t2, -1 # decrement numbers
bnez $t2, nloop # repeat loop while not zero
addi $t1, $t1, -1 # decrement cards
bnez $t1, cloop # repeat loop while not zero
addi $t0, $t0, -1 # decrement players
bnez $t0, ploop # repeat loop while not zero
# menu loop
menu_loop:
# print menu
la $a0, menu # load address of menu
li $v0, 4 # syscall to print string
syscall # print the menu options
read_choice:
# read choice
la $a0, prompt_ch # load address of prompt string
li $v0, 4 # syscall to print string
syscall # print the prompt
li $v0, 5 # syscall to read an integer
syscall # read the number of players
beq $v0, 1, read_player # if 1, display a card, start reading player
beq $v0, 2, disp_histo # if 2, display histogram
beq $v0, 3, exit # if 3, exit
# else, print error message
la $a0, err_choice # load address of error string
li $v0, 4 # syscall to print string
syscall # print the error message
j read_choice # try again
read_player:
# read player number
la $a0, prompt_pn # load address of prompt string
li $v0, 4 # syscall to print string
syscall # print the prompt
move $a0, $s0 # load maximum number of players
li $v0, 1 # syscall to print a number
syscall # print maximum number
la $a0, prompt_end # load address of prompt end string
li $v0, 4 # syscall to print string
syscall # print the prompt end part
li $v0, 5 # syscall to read an integer
syscall # read the player number
move $s2, $v0 # save player number
blt $v0, 1, bad_player # if not correct, print error
ble $v0, $s0, read_card # if correct, read card
bad_player:
# print error message
la $a0, err_player # load address of error string
li $v0, 4 # syscall to print string
syscall # print the error message
j read_player # try again
read_card:
# read card number
la $a0, prompt_cn # load address of prompt string
li $v0, 4 # syscall to print string
syscall # print the prompt
move $a0, $s1 # load maximum number of cards
li $v0, 1 # syscall to print a number
syscall # print maximum number
la $a0, prompt_end # load address of prompt end string
li $v0, 4 # syscall to print string
syscall # print the prompt end part
li $v0, 5 # syscall to read an integer
syscall # read the card number
move $s3, $v0 # save card number
blt $v0, 1, bad_card # if not correct, print error
ble $v0, $s0, display # if correct, print card
bad_card:
# print error message
la $a0, err_card # load address of error string
li $v0, 4 # syscall to print string
syscall # print the error message
j read_card # try again
display:
la $a0, bingo # load address of bingo string
li $v0, 4 # syscall to print string
syscall # print the bingo title
li $t0, 24 # size of a player entry = 24 * n cards
mult $t0, $s1 # multiply 25*number of cards
mflo $t0 # load result
addi $t1, $s2, -1 # player - 1
mult $t0, $t1 # multiply player size*(player - 1)
mflo $t0 # load result
li $t1, 24 # size of a card entry = 24
addi $t2, $s3, -1 # card - 1
mult $t1, $t2 # multiply 24*(card - 1)
mflo $t1 # load result
add $t0, $t0, $t1 # add to get start of card to print
la $t1, cards # point to start of cards
add $t0, $t0, $t1 # add to base address to get address of card
# display all numbers in card
li $t1, 5 # start with the number of numbers in row
disp_row:
li $t2, 5 # start with the number of numbers in col
disp_col:
bne $t1, 3, skip # if row not 3, display
bne $t2, 3, skip # if col not 3, display
li $v0, 11 # syscall to print a character
li $a0, 32 # load space char
syscall # print a space
syscall # print double space
j next_col # go to next column
skip:
lb $t3, 0($t0) # load number
bge $t3, 10, print # if number > 10, don't print space
li $v0, 11 # syscall to print a character
li $a0, 32 # load space char
syscall # print a space
print:
li $v0, 1 # syscall to print integer
move $a0, $t3 # load number
syscall # print the number
addi $t0, $t0, 1 # advance to next space in array
next_col:
li $v0, 11 # syscall to print a character
li $a0, 32 # load space char
syscall # print a space
addi $t2, $t2, -1 # decrement numbers
bnez $t2, disp_col # repeat loop while not zero
li $v0, 11 # syscall to print a character
li $a0, 10 # load newline char
syscall # print a newline
addi $t1, $t1, -1 # decrement numbers
bnez $t1, disp_row # repeat loop while not zero
li $v0, 11 # syscall to print a character
li $a0, 10 # load newline char
syscall # print a newline
j menu_loop # repeat loop
disp_histo:
la $t0, histo # point to start of histogram
li $t1, 1 # start in number 1
hist_loop:
bge $t1, 10, printnum # if number > 10, don't print space
li $v0, 11 # syscall to print a character
li $a0, 32 # load space char
syscall # print a space
printnum:
li $v0, 1 # syscall to print integer
move $a0, $t1 # load number
syscall # print the number
li $v0, 11 # syscall to print a character
li $a0, ':' # load colon char
syscall # print a colon
li $v0, 11 # syscall to print a character
li $a0, 32 # load space char
syscall # print a space
lb $t2, 0($t0) # load number from histogram
j ast_cmp # jump to comparison
ast_loop:
li $v0, 11 # syscall to print a character
li $a0, '*' # load asterisk char
syscall # print an asterisk
addi $t2, $t2, -1 # decrement count
ast_cmp:
bnez $t2, ast_loop # repeat while not zero
li $v0, 11 # syscall to print a character
li $a0, 10 # load newline char
syscall # print a newline
addi $t0, $t0, 1 # advance position in histogram
addi $t1, $t1, 1 # increment histogram number
ble $t1, 75, hist_loop # if num <= 75, print next
li $v0, 11 # syscall to print a character
li $a0, 10 # load newline char
syscall # print a newline
j menu_loop # repeat loop
exit:
li $v0, 10 # syscal to exit program
syscall # terminate program
Similar Samples
Discover our array of programming homework samples spanning Java, Python, C++, and more. Each sample exemplifies our proficiency in tackling intricate coding challenges effectively. Whether you're grappling with algorithms, data structures, or software development projects, our samples underscore our dedication to delivering high-quality solutions tailored to your academic needs.
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language