代码之家  ›  专栏  ›  技术社区  ›  Daisy Lockhart

使用用户输入在mips中迭代添加数字。我试图在mips中将数字从1添加到用户的输入,但输出总是1

  •  0
  • Daisy Lockhart  · 技术社区  · 7 年前

    enter image description here

    .data
    prompt:.asciiz "Enter a positive integer:"
    I_msg1: .asciiz "(Iterarive) Sum from 1 to "
    I_msg2: .asciiz " = "
    R_msg1: .asciiz "(Recursive) Sum from 1 to "
    R_msg2: .asciiz " = "
    NewLine: .asciiz "\n"
    NewLine2:.asciiz "\n\n"
    done:.asciiz "Done..."
    
    
    n : .word 0
    result1: .word 0
    result2: .word 0
    
    .text 
    
    .globl main
    main:
    
        # Make two line space
        li $v0, 4
        la $a0,NewLine2
        syscall 
        # Print message to prompt user input
        li $v0, 4
        la $a0,prompt
        syscall 
        #read user input 
        li $v0, 5
        syscall
        #store user input in variable n
        sw $v0,n 
        #___________________________________
        #print I_msg1   
        li $v0,4
        la $a0,I_msg1
        syscall
    
        #print user input 
        li $v0,1
        lw $a0, n
        syscall
    
        #call iterative function 
        lw $a0,n
        jal ItrSum
        sw $v0, result1
    
        #Display I_msg2 
        li $v0, 4
        la $a0,I_msg2
        syscall 
        #print result of iterative sum
        li $v0,1
        lw $a0, result1
        syscall
    
        li $v0, 4
        la $a0,NewLine
        syscall 
        #______________________________
    
        #Exit 
        li $v0,10
        syscall
    
    .globl ItrSum
        addi $sp, $sp, -4
        sw $s0,($sp)
        move $s0,$a0 #store value of n in $s0
    ItrSum:
        beq $s0,$zero,end #if n = 0 end loop
        subi $t0,$s0,1 # find n-1 and store in new location t1
        add $t0,$s0,$t0 # n+(n-1)
        subi $s0,$s0,1  # decrement original  n 
        j ItrSum  #repeat
    
        end:
        add $v0, $s0,$v0 #store result in $v0
        lw $s0, ($sp)   
        addi $sp, $sp, 4 
        jr $ra
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Michael    7 年前
    add $v0, $s0,$v0 #store result in $v0
    

    $s0 + $v0 显然在那一点上并不支持你的结果。 $s0 是循环计数器,将为0。和 $v0 将为1,因为上次使用它是为了打印用户输入。我觉得你想要 move $v0, $t0 .

    不过,您的代码还有其他问题。例如 ItrSum 标签放置在循环开始的位置,而不是函数开始的位置。更好的方法是:

    ItrSum:
        addi $sp, $sp, -4
        sw $s0,($sp)
        li $v0,0      # result
        move $t0,$a0  # $t0 = n
    sum_loop:       
        beq $t0,$zero,end  # if n = 0 end loop
        addu $v0,$v0,$t0   # result += n
        addi $t0,$t0,-1    # n -= 1
        j sum_loop         # repeat
    end:
        lw $s0, ($sp)   
        addi $sp, $sp, 4 
        jr $ra