[英]MIPS Assembly program to calculate the trace of a matrix after taking an integer input
The following is my MIPS assembly code which refuses to work for some reason. 以下是我的MIPS汇编代码,由于某些原因该代码拒绝工作。 SOMEONE please rescue me, i've been stuck for 3 weeks!!! 有人请救救我,我被困了三个星期!!! I'm supposed to read in an int n, square it, then read in the the n(squared) values into a matrix then calculate the trace of the matrix. 我应该读一个int n,将其平方,然后将n(squared)值读入一个矩阵,然后计算该矩阵的迹线。 I read onto and off a stack, but somewhere along the lines, i must have a simple logic error which i cant identify. 我读了一个堆栈,然后从堆栈中读取,但是沿线的某个地方,我必须有一个我无法识别的简单逻辑错误。 Thanks in advance: 提前致谢:
.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
These are the errors I found: 这些是我发现的错误:
This 这个
li $t0, $t2 #t0 receives the squared value from $t2
becomes 变成
move $t0, $t2 #t0 receives the squared value from $t2
endstackloop
does not exists. endstackloop
不存在。
This 这个
add $t4, $t4, $0 #setting comparison value to 0
becomes 变成
li $t4, 0 #setting comparison value to 0
If you provide more information on what is not working, we can help better. 如果您提供有关无法解决问题的更多信息,我们将为您提供更好的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.