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

Please add reasons why each line is written if you can. I would like to understa

ID: 3604593 • Letter: P

Question

Please add reasons why each line is written if you can. I would like to understand this and be able to do it on my own. Thank you.

QUESTION:

The file assign2.asm holds a partial program. The purpose of the program is to read in a list of 10 integers and then print them out. There are 4 functions in the program; 2 of which you are to complete. WE HAVE TO USE RUNTIME STACK BECAUSE THAT WAS THE LESSON and NO PSUEDO-INSTRUCTIONS.

Main: This function will call getdata and print. Main is complete and should not be changed.

Getdata: This function reads 10 integers and stores them into memory. There is one parameter($a0) which holds the address of where the list of numbers is to be stored. Getdata calls thefunction printstr to print the prompt. Getdata is complete and should not be changed.

Printstr: This function is to print a string. There is one parameter ($a0) which holds the address of the string to print. You are to complete this function so it performs as required.This function is call from the getdata function and the print function.

Print: This function is to print the list of integers. The integers must all be on the same line of output and be separated by a comma and space (already in the data segment). See the example input and output below. This function must call the printstr function to print the comma string. Remember that as this function calls another, it must save and restore the $ra.

Specifics:

-Use only the instructions covered to date.

-Do not use pseudo-instructions. See the information under MARS for preventing the use of pseudo-instructions.

-Make sure that your print function calls the printstr function correctly and that the stack is used correctly.

Documentation:

-Comment every instruction.

# add your name and comments

.data
.space 40   # set aside 40 bytes for 10 integers
prompt: .asciiz "Enter a number " # address 0x10010028
comma: .asciiz ", " # address 0x10010038

.globl main
.text
main:
   lui $a0, 0x1001   # get start of data segment
   jal getdata   # call getdata function
  
   lui $a0, 0x1001   # get start of data segment
   jal print   # call print function
  
   ori $v0, $0, 10 # set command to exit
   syscall       # end program
  
# printstr
# paramters: $a0 holds address of string to print
# purpose: print the string parameter

printstr:
#to be completed
   jr $ra
  
getdata:
   addi $sp, $sp, -4 # allocate space on stack
   sw $ra, 0($sp)   # save $ra
   ori $t1, $a0, 0 # address of array

   lui $t1, 0x1001   #start of data
   ori $a0, $a0, 0x0028 # address of prompt  
   ori $t0, $0, 10   # counter
top:   beq $t0, $0, ret # while not 0

   jal printstr   # call function to print prompt
   ori $v0, $0, 5   # set command to read integer
   syscall       # read int
   sw $v0, 0($t1)   # save int in memory
   addi $t1, $t1, 4 # increment to next location
  
   addi $t0, $t0, -1 # decrement counter
   j top       # repeat
  
ret:   lw $ra, 0($sp)   # restore return address
   addi $sp, $sp, 4 # clean up stack
   jr $ra       # return from call
  
# print
# parameter: $a0 holds address of list in memory
# purpose: print the list separated by commas

print:  
   #to be completed
   jr $ra

Explanation / Answer

#here is the code for printstr and print

# in print loop the commas are made to start after 2nd number i.e.,

# for eg if it is in c program print 1st number and then start for loop for(i=2;i<=9;i++)

printstr:
      la      $a0, prompt     # address of prompt goes in
        li      $v0, 4          # service code for print string
        syscall   
    jr $ra          #return from call by putting value to ra

print:   
    addi $t2, $t2, 10

   addi $t0, $t0,1 #increment by 1 before entering into loop

   ori $v0, $0, 4   #print 1st value ,as loop start from 2nd value

syscall


    jal loop    #jump to loop
loop:    beq $t0, $t2, end   
    lui $t3, 0x1001
    or $a0, $0, $t3
    ori $v0, $0, 1
    syscall
    addi $t3, $t3, 4

ori $a0, $a0, 0x0038
    ori $v0, $0, 4          #command to print string at $a0
    syscall
    addi $t0, $t0, 1
    j top

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