用户询问您要进行多少输入,然后以 mips 为单位显示其总和



我想用mips制作一个程序,用户将在其中输入他想要的输入数量。最后,程序将打印输入的总和。

这是我的代码:

 .data
    myMessage:  .asciiz "ENTER numbers you want to sumn"
    value:      .asciiz "ENTER  Value n"
    sum :       .word 0

 .text
    li $v0, 4
    la $a0, myMessage
    syscall
    li $v0, 5
    syscall
    move $t0, $v0         #num of time user will enter num
    la $t1, 0         #count value first initiallize to 0
see:
    bne $t1,$t0,add         #checking if  count is less than the num of value 

    li  $v0, 1              #printing sum finally
    la $a0, ($s2)
add:
    li $v0,4
    la $a0,value
    syscall
    li $v0,5
    syscall
    move $t3,$v0

    la $a1, sum     #load address of 'bal' in '$a1'
    lw $s3, 0($a1)      #load sum from '$a1' to '$s2' (initially 0)
    add $s3, $s3, $t3   #adding the sum 
    sw $s2, 0($a1)      #load latest sum ('$s2') in .word balance ('$a1')
    addi $t1,$t1,1                    inc in count
    j see

问题是程序在达到所需的输入数量后不会停止,而是继续请求新的输入。

.data      # Data declaration section
    instring1:    .asciiz  "ENTER numbers you want to sumn"
    instring2:    .asciiz  "Enter valuen"
    outstring:    .asciiz  "Sum: "
.text#
main: 
#Print instring1
    li $v0, 4           # system call code for printing string = 4
    la $a0, instring1   # load address of string to be printed into $a0
    syscall             # call operating system to perform operation in $v0
                        #     syscall takes its arguments from $a0, $a1,
#Taking n as input
    li $v0, 5 # read int
    syscall
    move $s0, $v0 # the result of the syscall is stored in v0
                # we move it to t0 to prevent overwriting
#Creation heap memory
    mul $t1, $s0, 4
    li $v0, 9
    move $a0, $t1
    syscall
    move $s1, $v0
        
#Print instring2
    li $v0, 4           # system call code for printing string = 4
    la $a0, instring2  # load address of string to be printed into $a0
    syscall             # call operating system to perform operation in $v0
                        #     syscall takes its arguments from $a0, $a1,
    li   $s2, 0         # $s2 is the index, and loop induction variable
        
Start_Input:  
    bge  $s2, $s0, End_Input
    li $v0, 5           # Read integer values
    syscall
    
    mul  $t0, $s2, 4    # $t0 is the offset
    add  $t1, $s1, $t0  # $t1 is the address of desired index
    sw   $v0, ($t1)     # store the value in the array
    addi $s2, $s2, 1    # increment the index        
    j    Start_Input
End_Input:
    add $t0, $zero, $zero # i is initialized to 0, $t0 = 0
    add $s2, $zero, $zero # sum = 0
    beq $s0, $zero, print_sum # if number = 0 then goto print_sum
Loop: #stuff
    mul $t1, $t0, 4
    add  $t2, $s1, $t1
    lw $t3, ($t2)
    add $s2, $s2, $t3
    addi $t0, $t0, 1 # i ++
    slt $t1, $t0, $s0 # $t1 = 1 if i < n
    bne $t1, $zero, Loop # go to Loop if i < n
#Print Sum
print_sum:
    li $v0, 4           # system call code for printing string = 4
    la $a0, outstring   # load address of string to be printed into $a0
    syscall             # call operating system to perform operation in $v0
                        #     syscall takes its arguments from $a0, $a1,
    li $v0 1 # print int
    move $a0 $s2
    syscall
#Exit Syscall
EXIT:
    li $v0 10# exit
    syscall

这是工作代码。提供注释以了解代码。

.data 
myMessage:.asciiz "ENTER numbers you want to sumn" 
value:.asciiz "ENTER  Value: "
show: .asciiz "nSum is: "
.text 
li $v0,4 
la $a0,myMessage 
syscall 
li $v0,5 
syscall
move $t0,$v0    #num of time user will enter num
la $t1, 0   #count value first initiallize to 0
la $t5, 0
see:
bne $t1,$t0,add #checking if  count is less than the num of value
li $v0, 4
la $a0, show
syscall     #print message "Sum is: "
li $v0, 1
move $a0, $t5
syscall     #print the result
j end
add: 
li $v0,4 
la $a0,value 
syscall
li $v0, 5
syscall
add $t5, $t5, $v0
sub $t0, $t0, 1
j see
end:

相关内容

最新更新