Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Name: VSlobodovP1.asm
- #1) Prompt user for sentinel value
- #2) Store sentinel in t0.
- #3) Begin loop.
- #a) prompt user for integer value
- #b) store it in t3 #skip this step, as the program instructions ask us not to save the number. we can just keep it in v0 until we're done with it
- #c) If t3>0 add 1 to s0, if t2<0 add 1 to s1, if t2 = 0 add 1 to s2.
- #d) If t3>0 add it to t1, if t3<0 add it to t2. We can combine this with 3c.
- #e) Set t3 = 0.
- #f) go back to the start of the loop
- #g) exit the loop if sentinel is entered
- #4) Output
- #a) Output sums
- #b) Output counters
- #c) Comparison and ouput phases
- # i) Compare positive and negative, if positive go to ii, else go to iii
- # ii) compare positive and zeroes, output
- # iii) compare negative and zeroes, output
- #5) Terminate
- .text
- .globl main
- main:
- prompt:
- #prompt user for the sentinel value and store
- li $v0, 4
- la $a0, prompt_sentinel
- syscall
- li $v0, 5
- syscall #see 1
- move $t0, $v0 #see 2
- #initialize our values
- li $s0, 0
- li $s1, 0
- li $s2, 0
- li $t1, 0
- li $t2, 0
- loop:
- li $v0, 4
- la $a0, prompt_integer
- syscall
- li $v0, 5
- syscall #see 3a
- beq $v0, $t0, output #see 3g
- bgtz $v0, adds0
- bltz $v0, adds1
- beqz $v0, adds2 #see 3c
- adds0:
- add $s0, $s0, 1 #see 3c
- add $t1, $t1, $v0 #see 3d
- li $t3, 0 #see 3e
- j loop #see 3f
- adds1:
- add $s1, $s1, 1 #see 3c
- add $t2, $t2, $v0 #see 3d
- li $t3, 0 #see 3e
- j loop #see 3f
- adds2:
- add $s2, $s2, 1 #see 3c, 3d unnecessary, snce adding 0 is superfluous
- li $t3, 0 #see 3e
- j loop #see 3f
- output:
- li $v0, 4
- la $a0, output_sums_posi
- syscall
- move $a0, $t1
- li $v0, 1
- syscall #see 4a
- li $v0, 4
- la $a0, output_sums_nega
- syscall
- move $a0, $t2
- li $v0, 1
- syscall #see 4a
- li $v0, 4
- la $a0, output_counter_posi
- syscall
- move $a0, $s0
- li $v0, 1
- syscall #see 4b
- li $v0, 4
- la $a0, output_counter_nega
- syscall
- move $a0, $s1
- li $v0, 1
- syscall #see 4b
- li $v0, 4
- la $a0, output_counter_zero
- syscall
- move $a0, $s2
- li $v0, 1
- syscall #see 4b
- #testing phase 4c
- bgt $s0, $s1, output_ii
- j output_iii #see 4ci
- output_ii:
- bgt $s0, $s2, output_posi
- j output_zero#see 4cii
- output_iii:
- bgt $s1, $s2, output_nega
- j output_zero #see 4ciii
- #output phase 4c
- output_posi:
- li $v0, 4
- la $a0, posi_big
- syscall
- j exit
- output_nega:
- li $v0, 4
- la $a0, nega_big
- syscall
- j exit
- output_zero:
- li $v0, 4
- la $a0, zero_big
- syscall
- j exit
- exit:
- li $v0, 4
- la $a0, terminate
- syscall
- li $v0, 10
- syscall #see 5
- .data
- prompt_sentinel:
- .asciiz "Please input the sentinel for this program: "
- prompt_integer:
- .asciiz "Please input your integer: "
- output_sums_posi:
- .asciiz "\nThe sum of the positive numbers is: "
- output_sums_nega:
- .asciiz "\nThe sum of the negative numbers is: "
- output_counter_posi:
- .asciiz "\nThe number of positive numbers entered is "
- output_counter_nega:
- .asciiz ", the number of negative numbers entered is "
- output_counter_zero:
- .asciiz ", and the number of zeroes entered is "
- posi_big:
- .asciiz ".\nThe majority of the numbers entered were positive."
- nega_big:
- .asciiz "\nThe majority of the numbers entered were negative."
- zero_big:
- .asciiz "\nThe majority of the numbers entered were zeroes."
- terminate:
- .asciiz "\nThe program is now closing. Have a nice day."
Advertisement
Add Comment
Please, Sign In to add comment