Advertisement
Ambamore

Untitled

Feb 23rd, 2022 (edited)
1,761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .globl main
  2.  
  3. .text
  4.  
  5. main:
  6.  
  7.     li $v0, 4           # Code for print string
  8.     la $a0, welcome_message # Load address of welcome message
  9.     syscall         # Call print
  10.    
  11.     li $t6, 0           # Miss Count
  12.    
  13.     while:
  14.    
  15.         jal print_game
  16.    
  17.         addi $sp, $sp, -4
  18.         sw $t0, 0($sp)
  19.         addi $sp, $sp, -4
  20.         sw $t1, 0($sp)
  21.         addi $sp, $sp, -4
  22.         sw $t2, 0($sp)
  23.         addi $sp, $sp, -4
  24.         sw $t3, 0($sp)
  25.         addi $sp, $sp, -4
  26.         sw $t4, 0($sp)
  27.        
  28.         jal check_game
  29.        
  30.         lw $t4, 0($sp)
  31.         addi $sp, $sp, 4
  32.         lw $t3, 0($sp)
  33.         addi $sp, $sp, 4
  34.         lw $t2, 0($sp)
  35.         addi $sp, $sp, 4
  36.         lw $t1, 0($sp)
  37.         addi $sp, $sp, 4
  38.         lw $t0, 0($sp)
  39.         addi $sp, $sp, 4
  40.        
  41.         bne $v0, $zero, end_while
  42.        
  43.         jal user_input
  44.        
  45.         add $t0, $zero, $v0
  46.        
  47.         li $t1, 48  # 48 = '0'
  48.         beq $t0, $t1, exit
  49.        
  50.         li $t1, 65  # 65 = 'A' 90 = 'Z'
  51.         blt $t0, $t1, invalid
  52.         li $t1, 90
  53.         bgt $t0, $t1, invalid
  54.        
  55.         for_used_character:
  56.             li $t2, 0
  57.             lw $t3, word_size
  58.            
  59.             la $t4, current
  60.  
  61.             for_check_character:
  62.            
  63.                 lbu $t5, ($t4)
  64.                
  65.                 beq $t5, $t0, used_character
  66.                 beq $t2, $t3, exit_for_used_character
  67.                
  68.                 addi $t4, $t4, 1
  69.                 addi $t2, $t2, 1
  70.                
  71.                 j for_check_character
  72.         exit_for_used_character:
  73.        
  74.         for_used_misses_character:
  75.             li $t2, 0
  76.             li $t3, 5
  77.            
  78.             la $t4, misses
  79.  
  80.             for_check_misses_character:
  81.            
  82.                 lbu $t5, ($t4)
  83.                
  84.                 beq $t5, $t0, used_character
  85.                 beq $t2, $t3, exit_for_used_misses_character
  86.                
  87.                 addi $t4, $t4, 1
  88.                 addi $t2, $t2, 1
  89.                
  90.                 j for_check_misses_character
  91.         exit_for_used_misses_character:
  92.        
  93.         li $t1, 1
  94.        
  95.         for_check_missed:
  96.             li $t2, 0
  97.             lw $t3, word_size
  98.            
  99.             la $t4, solution
  100.            
  101.             for_check_solution:
  102.            
  103.                 lbu $t5, ($t4)
  104.                
  105.                 beq $t5, $t0, update_current
  106.                 back_to_for_check_solution:
  107.                 beq $t2, $t3, exit_for_check_missed
  108.                    
  109.                 addi $t4, $t4, 1
  110.                 addi $t2, $t2, 1
  111.                
  112.                 j for_check_solution
  113.         exit_for_check_missed:
  114.        
  115.         bne $t1, $zero, missed
  116.         done_missed:
  117.        
  118.         j while
  119.        
  120.     missed:
  121.        
  122.         la $a1, misses
  123.         add $a1, $a1, $t6
  124.         sb $t0, ($a1)
  125.         addi $t6, $t6, 1
  126.        
  127.         li $t9, 1
  128.         beq $t6, $t9, missedOne
  129.        
  130.         li $t9, 2
  131.         beq $t6, $t9, missedTwo
  132.        
  133.         li $t9, 3
  134.         beq $t6, $t9, missedThree
  135.        
  136.         li $t9, 4
  137.         beq $t6, $t9, missedFour
  138.        
  139.         li $t9, 5
  140.         beq $t6, $t9, missedFive
  141.        
  142.         li $t9, 6
  143.         beq $t6, $t9, missedSix
  144.        
  145.         j done_missed
  146.         # O = 79, | = 124, \ = 92, / = 47
  147.         missedOne:
  148.             la $a1, game_line
  149.             addi $a1, $a1, 36
  150.             li $t8, 79
  151.             sb $t8, ($a1)
  152.             j done_missed
  153.         missedTwo:
  154.             la $a1, game_line
  155.             addi $a1, $a1, 47
  156.             li $t8, 124
  157.             sb $t8, ($a1)
  158.             addi $a1, $a1, 11
  159.             sb $t8, ($a1)
  160.             j done_missed
  161.         missedThree:
  162.             la $a1, game_line
  163.             addi $a1, $a1, 46
  164.             li $t8, 92
  165.             sb $t8, ($a1)
  166.             j done_missed
  167.         missedFour:
  168.             la $a1, game_line
  169.             addi $a1, $a1, 48
  170.             li $t8, 47
  171.             sb $t8, ($a1)
  172.             j done_missed
  173.         missedFive:
  174.             la $a1, game_line
  175.             addi $a1, $a1, 68
  176.             li $t8, 47
  177.             sb $t8, ($a1)
  178.             j done_missed
  179.         missedSix:
  180.             la $a1, game_line
  181.             addi $a1, $a1, 70
  182.             li $t8, 92
  183.             sb $t8, ($a1)
  184.             jal print_game
  185.            
  186.             li $v0, 4           # Code for print string
  187.    
  188.             la $a0, lose_line       # Load address of lose message
  189.             syscall         # Call print
  190.            
  191.             j return
  192.    
  193.     update_current:
  194.    
  195.         la $a1, current
  196.         add $a1, $a1, $t2
  197.         sb $t0, ($a1)
  198.         li $t1, 0
  199.        
  200.         j back_to_for_check_solution
  201.    
  202.     used_character:
  203.    
  204.         li $v0, 4           # Code for print string
  205.    
  206.         la $a0, already_use_line    # Load address of used character message
  207.         syscall         # Call print
  208.        
  209.         j while
  210.    
  211.     invalid:
  212.    
  213.         li $v0, 4           # Code for print string
  214.    
  215.         la $a0, invalid_line        # Load address of invalid message
  216.         syscall         # Call print
  217.        
  218.         j while
  219.    
  220.     end_while:
  221.         jal print_game
  222.        
  223.         li $v0, 4           # Code for print string
  224.    
  225.         la $a0, win_line        # Load address of win message
  226.         syscall         # Call print
  227.        
  228.         j return
  229.    
  230.     exit:
  231.         li $v0, 4
  232.        
  233.         la $a0, exit_line
  234.         syscall
  235.        
  236.         j return
  237.    
  238.     return:
  239.    
  240.     li $v0, 10          # Code for exit
  241.     syscall         # Call exit
  242.  
  243. check_game:
  244.  
  245.     addi $sp, $sp, -4       # Save ra register
  246.     sw $ra, 0($sp)          # Save ra register
  247.  
  248.     li $t0, 0
  249.     lw $t1, word_size
  250.    
  251.     la $t2, current
  252.    
  253.     li $t3, 95
  254.  
  255.     for_check_game:
  256.         bge $t0, $t1, return_true_check_game
  257.    
  258.         lbu $t4, ($t2)
  259.        
  260.         beq $t4, $t3, return_false_check_game
  261.        
  262.         addi $t2, $t2, 1
  263.         addi $t0, $t0, 1
  264.        
  265.         j for_check_game
  266.    
  267.     return_true_check_game:
  268.         li $v0, 1
  269.         j end_for_check_game
  270.    
  271.     return_false_check_game:
  272.         li $v0, 0
  273.         j end_for_check_game
  274.    
  275.     end_for_check_game:
  276.    
  277.     lw $ra, 0($sp)          # Load ra register
  278.     addi $sp, $sp, 4        # Load ra register
  279.     jr $ra              # Jump to return address
  280.  
  281. print_game:
  282.  
  283.     addi $sp, $sp, -4       # Save ra register
  284.     sw $ra, 0($sp)          # Save ra register
  285.    
  286.     li $v0, 4           # Code for print string
  287.    
  288.     la $a0, game_line       # Load address of game message
  289.     syscall         # Call print
  290.    
  291.     la $a0, word_line       # Load address of "Word: "
  292.     syscall         # Call print
  293.     la $a0, current     # Load address of "_______"
  294.     syscall         # Call print
  295.     la $a0, new_line        # Load address of "\n"
  296.     syscall         # Call print
  297.    
  298.     la $a0, misses_line     # Load address of "Misses: "
  299.     syscall         # Call print
  300.     la $a0, misses          # Load address of misses
  301.     syscall         # Call print
  302.     la $a0, new_line        # Load address of "\n"
  303.     syscall         # Call print
  304.    
  305.     lw $ra, 0($sp)          # Load ra register
  306.     addi $sp, $sp, 4        # Load ra register
  307.     jr $ra              # Jump to return address
  308.  
  309. user_input:
  310.  
  311.     addi $sp, $sp, -4       # Save ra register
  312.     sw $ra, 0($sp)          # Save ra register
  313.    
  314.     li $v0, 4           # Code for print string
  315.    
  316.     la $a0, prompt_input_line   # Load address of prompt input line
  317.     syscall         # Call print
  318.    
  319.     li $v0, 12          # Code for read character
  320.     syscall         # Call read character
  321.    
  322.     add $t0, $zero, $v0
  323.    
  324.     li $v0, 4
  325.     la $a0, new_line
  326.     syscall
  327.    
  328.     add $v0, $zero, $t0
  329.     li $t0, 0
  330.    
  331.     lw $ra, 0($sp)          # Load ra register
  332.     addi $sp, $sp, 4        # Load ra register
  333.     jr $ra              # Jump to return address
  334.  
  335. .data
  336. welcome_message:    .asciiz "Welcome to Hangman!\nVersion 1.0\nImplemented by Andrew Kim\n\n"
  337. solution:       .asciiz "HANGMAN"
  338. current:        .asciiz "_______"
  339. misses:     .asciiz "      "
  340. word_line:      .asciiz "Word: "
  341. misses_line:        .asciiz "Misses: "
  342. new_line:       .asciiz "\n"
  343. game_line:      .asciiz "   |-----|\n   |     |\n   |     |\n         |\n         |\n         |\n         |\n         |\n ---------\n"
  344. prompt_input_line:  .asciiz "Enter next character (A-Z), or 0 (zero) to exit: "
  345. win_line:       .asciiz "Congratulations - you win!\n"
  346. lose_line:      .asciiz "You lose - out of moves\n"
  347. exit_line:      .asciiz "Exiting game...\n"
  348. invalid_line:       .asciiz "Invalid input\n"
  349. already_use_line:   .asciiz "Already used character\n"
  350. miss_count:     .word 0
  351. word_size:      .word 7
  352.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement