Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The parts that need to be changed in main are between the comment lines Your par

ID: 3798993 • Letter: T

Question

The parts that need to be changed in main are between the comment lines Your part starts here and Your part ends here.

# CMPEN 331, Lab 2

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# switch to the Data segment
   .data
   # global data is defined here

   # Don't forget the backslash-n (newline character)
Homework:
   .asciiz   "CMPEN 331 Homework 2 "
Name_1:
   .asciiz   "First Person's name "
Name_2:
   .asciiz   "Second Person's name "

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# switch to the Text segment
   .text
   # the program is defined here

   .globl   main
main:
   # Whose program is this?
   la   $a0, Homework
   jal   Print_string
   la   $a0, Name_1
   jal   Print_string
   la   $a0, Name_2
   jal   Print_string
  
   # int i, j = 2, n = 3;
   # for (i = 0; i <= 16; i++)
   #   {
   #      ... j = testcase[i]
   #      ... calculate n from j
   #      ... print i, j and n
   #   }
  
   # register assignments
   # $s0   i
   # $s1   j = testcase[i]
   # $s2   n
   # $t0   address of testcase[i]
   # $a0   argument to Print_integer, Print_string, etc.
   # add to this list if you use any other registers

   # initialization
   li   $s1, 2           # j = 2
   li   $s2, 3           # n = 3
  
   # for (i = 0; i <= 16; i++)
   li   $s0, 0           # i = 0
   la   $t0, testcase       # address of testcase[i]
   bgt   $s0, 16, bottom
top:
   lw   $s1, 0($t0)       # j = testcase[i]
   # calculate n from j
   # Your part starts here
   # Your part ends here
  
   # print i, j and n
   move   $a0, $s0   # i
   jal   Print_integer
   la   $a0, sp       # space
   jal   Print_string
   move   $a0, $s1   # j
   jal   Print_hex
   la   $a0, sp       # space
   jal   Print_string
   move   $a0, $s2   # n
   jal   Print_hex
   la   $a0, sp       # space
   jal   Print_string
   move   $a0, $s1   # j
   jal   Print_bin
   la   $a0, sp       # space
   jal   Print_string
   move   $a0, $s2   # n
   jal   Print_bin
   la   $a0, nl       # newline
   jal   Print_string
  
   # for (i = 0; i <= 16; i++)
   addi   $s0, $s0, 1   # i++
   addi   $t0, $t0, 4   # address of testcase[i]
   ble   $s0, 16, top   # i <= 16
bottom:
  
   la   $a0, done   # mark the end of the program
   jal   Print_string
  
   jal   Exit0   # end the program, default return status

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

   .data
   # global data is defined here
sp:
   .asciiz   " "   # space
nl:
   .asciiz   " "   # newline
done:
   .asciiz   "All done! "

testcase:
   # UTF-8 representation is one byte
   .word 0x0000   # nul       # Basic Latin, 0000 - 007F
   .word 0x0024   # $ (dollar sign)
   .word 0x007E   # ~ (tilde)
   .word 0x007F   # del

   # UTF-8 representation is two bytes
   .word 0x0080   # pad       # Latin-1 Supplement, 0080 - 00FF
   .word 0x00A2   # cent sign
   .word 0x0627   # Arabic letter alef
   .word 0x07FF   # unassigned

   # UTF-8 representation is three bytes
   .word 0x0800
   .word 0x20AC   # Euro sign
   .word 0x2233   # anticlockwise contour integral sign
   .word 0xFFFF

   # UTF-8 representation is four bytes
   .word 0x10000
   .word 0x10348   # Hwair, see http://en.wikipedia.org/wiki/Hwair
   .word 0x22E13   # randomly-chosen character
   .word 0x10FFFF

   .word 0x89ABCDEF   # randomly chosen bogus value

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

# Wrapper functions around some of the system calls
# See P&H COD, Fig. A.9.1, for the complete list.

   .text

   .globl   Print_integer
Print_integer:   # print the integer in register $a0 (decimal)
   li   $v0, 1
   syscall
   jr   $ra

   .globl   Print_string
Print_string:   # print the string whose starting address is in register $a0
   li   $v0, 4
   syscall
   jr   $ra

   .globl   Exit
Exit:       # end the program, no explicit return status
   li   $v0, 10
   syscall
   jr   $ra   # this instruction is never executed

   .globl   Exit0
Exit0:       # end the program, default return status
   li   $a0, 0   # return status 0
   li   $v0, 17
   syscall
   jr   $ra   # this instruction is never executed

   .globl   Exit2
Exit2:       # end the program, with return status from register $a0
   li   $v0, 17
   syscall
   jr   $ra   # this instruction is never executed

# The following syscalls work on MARS, but not on QtSPIM

   .globl   Print_hex
Print_hex:   # print the integer in register $a0 (hexadecimal)
   li   $v0, 34
   syscall
   jr   $ra

   .globl   Print_bin
Print_bin:   # print the integer in register $a0 (binary)
   li   $v0, 35
   syscall
   jr   $ra

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Explanation / Answer

# switch to the Data segment
.data
Name_1:
.asciiz "First Person's name "
Name_2:
.asciiz "Second Person's name
.text
# the program is defined here
.globl main
main:
# Whose program is this?
la $a0, Homework
jal Print_string
la $a0, Name_1
jal Print_string
la $a0, Name_2
jal Print_string
  
# int i, j = 2, n = 3;
# for (i = 0; i <= 16; i++)
# {
# ... j = testcase[i]
# ... calculate n from j
# ... print i, j and n
# }
  
# register assignments
# $s0 i
# $s1 j = testcase[i]
# $s2 n
# $t0 address of testcase[i]
# $a0 argument to Print_integer, Print_string, etc.
# initialization
li $s1, 2 # j = 2
li $s2, 3 # n = 3
  
# for (i = 0; i <= 16; i++)
li $s0, 0 # i = 0
la $t0, testcase # address of testcase[i]
bgt $s0, 16, bottom
top:
lw $s1, 0($t0)
# j = testcase[i]
move $a0, $s0 # i
jal Print_integer
la $a0, sp # space
jal Print_string
move $a0, $s1 # j
jal Print_hex
la $a0, sp # space
jal Print_string
move $a0, $s2 # n
jal Print_hex
la $a0, sp # space
jal Print_string
move $a0, $s1 # j
jal Print_bin
la $a0, sp # space
jal Print_string
move $a0, $s2 # n
jal Print_bin
la $a0, nl # newline
jal Print_string
# for (i = 0; i <= 16; i++)
addi $s0, $s0, 1 # i++
addi $t0, $t0, 4 # address of testcase[i]
ble $s0, 16, top # i <=
.data
.asciiz " " # space
nl:
.asciiz " " # newline
done:
.asciiz "All done! "
# UTF-8 representation is one byte
.word 0x0000 # nul # Basic Latin, 0000 - 007F
.word 0x0024 # $ (dollar sign)
.word 0x007E # ~ (tilde)
.word 0x007F # del
# UTF-8 representation is two bytes
.word 0x0080 # pad # Latin-1 Supplement, 0080 - 00FF
.word 0x00A2 # cent sign
.word 0x0627 # Arabic letter alef
.word 0x07FF # unassigned
# UTF-8 representation is three bytes
.word 0x0800
.word 0x20AC # Euro sign
.word 0x2233 # anticlockwise contour integral sign
.word 0xFFFF
# UTF-8 representation is four bytes
.word 0x10000
.word 0x10348 # Hwair, see http://en.wikipedia.org/wiki/Hwair
.word 0x22E13 # randomly-chosen character
.word 0x10FFFF
.word 0x89ABCDEF # randomly chosen bogus value
# Wrapper functions around some of the system calls
# See P&H COD, Fig. A.9.1, for the complete list.
.text
.globl Print_integer
Print_integer: # print the integer in register $a0 (decimal)
li $v0, 1
syscall
jr $ra
.globl Print_string
Print_string: # print the string whose starting address is in register $a0
li $v0, 4
syscall
jr $ra
.globl Exit
Exit: # end the program, no explicit return status
li $v0, 10
syscall
jr $ra # this instruction is never executed
.globl Exit0
Exit0: # end the program, default return status
li $a0, 0 # return status 0
li $v0, 17
syscall
jr $ra # this instruction is never executed
.globl Exit2
Exit2: # end the program, with return status from register $a0
li $v0, 17
syscall

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote