The parts that need to be changed in main are between the co

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

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

Solution

# 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

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 # - - - - - - - - - -
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 # - - - - - - - - - -
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 # - - - - - - - - - -
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 # - - - - - - - - - -
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 # - - - - - - - - - -

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site