MIPS汇编程序在获取整数输入后计算矩阵的迹线

时间:2013-04-18 13:46:53

标签: assembly matrix mips trace

以下是我的MIPS汇编代码,由于某种原因拒绝使用。有人请救我,我已经被困了3个星期!我应该读入一个int n,方形它,然后将n(平方)值读入矩阵然后计算矩阵的轨迹。我在堆栈上读取和关闭,但在某些地方,我必须有一个简单的逻辑错误,我无法识别。提前致谢:

.data                           #string variable declarations
get_int: .asciiz   "Please enter an int value n: "  #prompts user to enter a number
newline: .asciiz   "\n" 
.text 

.globl main 

main:   

addi $sp, $sp, -12                      #create a stack (stack frame..)
sw   $ra, 0($sp)                        #storage for stack elements
sw   $s0, 4($sp)      
sw   $s1, 8($sp)      
sw   $s2, 12($sp)               

li $v0, 5                       #Read input 
syscall
move $s0, $v0                       #$s0 = $v0 

mult $s0 $s0                            #square the entered int
mflo $t2
li $t0, $t2       #t0 receives the squared value from $t2


#adding stuff to the stack

li $t1, 0                       #t1 is our counter (i) 

stackloop:
beq $t1, $t0, endstackloop                  #exit loop when t1== $t0


li $v0, 5                       #Read input 
syscall
move $t5, $v0                       #$t5 = $v0 

addi $sp, $sp, -4
sw $t5, 0($sp)

addi $t1, $t1, 1                    #add 1 to t1
j stackloop                         #jump back to the top of loop

stackpop:

lw $t3, 0($sp)      #t3 = 1st value from stack 
add $s1, $s1, $t3   #adding that 1st value to sum
addi $sp, $sp, 4    #moving to the next stack element
sub $t1, $t1, 1     #decrementing counter by 1
add $t4, $t4, $0    #setting comparison value to 0

matrixcondition:
beq $t1, $0, output
lw $t3, 0($sp)
sub $t1, $t1, 1         #decrementing counter by 1
beq $s0, $t4, matrixtrace   #jump to matrixtrace when equal 
add $t4, $t4, 1         #add 1 to t4
j matrixcondition

matrixtrace:
add $s1, $s1, $t3   #adding that next value to sum
add $t4, $0, $0     #setting comparison value to 0
j matrixcondition

output:
li $v0, 4
syscall
j progterminate

progterminate:

lw $ra, 0($sp)                      #restoring the stack pointer

addi $sp, $sp, 8

jr $ra                          #return

1 个答案:

答案 0 :(得分:0)

这些是我发现的错误:

  1. li $t0, $t2       #t0 receives the squared value from $t2
    

    成为

    move $t0, $t2       #t0 receives the squared value from $t2
    
  2. endstackloop不存在。

  3. add $t4, $t4, $0    #setting comparison value to 0
    

    变为

    li $t4, 0    #setting comparison value to 0
    
  4. 如果您提供有关不起作用的更多信息,我们可以提供更好的帮助。