Assembly 我在这个MIPS代码中哪里出错了?

Assembly 我在这个MIPS代码中哪里出错了?,assembly,mips,quadratic,qtspim,Assembly,Mips,Quadratic,Qtspim,所以,我是MIPS新手,正在为二次公式编写代码。。。我认为我做的每件事都是对的,但我的程序总是给出错误的答案,有时它会在PC 0x004000f8上异常中止 如果有人能告诉我哪里出了问题,如果还有其他不一致的地方,请告诉我 在我的代码中,请引导。谢谢大家! .data promptfora: .asciiz "Enter Value of a: " promptforb: .asciiz "Enter Value of b: " promptfor

所以,我是MIPS新手,正在为二次公式编写代码。。。我认为我做的每件事都是对的,但我的程序总是给出错误的答案,有时它会在PC 0x004000f8上异常中止

如果有人能告诉我哪里出了问题,如果还有其他不一致的地方,请告诉我 在我的代码中,请引导。谢谢大家!

    .data
promptfora: .asciiz "Enter Value of a: "
promptforb: .asciiz "Enter Value of b: "
promptforc: .asciiz "Enter Value of c: "
finalansdisplay: .asciiz "root is:"
answer: .word 0



.text
.globl main
main:


#b in t1


li $v0, 4
la $a0, promptforb
syscall

li $v0, 5
syscall
move $t1, $v0



#a in t2


li $v0, 4
la $a0, promptfora
syscall

li $v0, 5
syscall
move $t2, $v0



#value of c in t3

li $v0, 4
la $a0, promptforc
syscall

li $v0, 5
syscall
move $t3, $v0



move $a0, $t1                          # pass arg's to function
jal power
move $t4, $v0                          #b^2

mul $t5,$t2,$t3                       # ac in t5

mul $t5,$t5,4

sub $a0,$t4,$t5                       # b^2 - 4ac

jal iSqrt


mul $t1,$t1,-1                   #- * b

add $t6,$t1,$v0                    # - b + sqrt(b^2 - 4ac)
 

mul $t2,$t2,2                      #2a 

div $t7, $t6,$t2                 #final root 


li $v0, 4
la $a0, finalansdisplay  
syscall

move $a0, $t6
li $v0, 1        #display final answer
syscall


li $v0, 10
syscall

.end main


#Function to square b

.globl power    
.ent power

power:

li $v0, 1

mul $v0, $a0, $a0

jr $ra
.end power


#Function for root


.globl iSqrt
.ent iSqrt
iSqrt:

move $v0, $a0 # $v0 = x = N

li $t0, 0 # counter
sqrLoop:

div $t1, $a0, $v0 # N/x

add $v0, $t1, $v0 # x + N/x

div $v0, $v0, 2 # (x + N/x)/2

add $t0, $t0, 1

blt $t0, 20, sqrLoop
jr $ra

.end iSqrt
试试这个代码

.数据

.文本 格洛博梅因酒店

主要内容: 李$v0,4 la$a0,提示 系统调用

权力: mul$v0、$a0、$a0 jr$ra

.终端功率 sqrt: 移动$v0,$a0 李$t5,0

sqrtloop: 分区$t6、$a0、$v0 添加$v0、$t6、$v0 部门$v0$v0,2 加上$t5,$t5,1 blt$t5,20,平方米 jr$ra
.end sqrt

尝试此方法,并对另一个根稍微更改此方法。您必须更改某些内容,并且如何执行此操作是您的测试

.data
prompt: .asciiz "Enter number 1: "
prompt2: .asciiz "Enter number 2: "
prompt3: .asciiz "Enter number 3: "
newline: .asciiz "\n"
answer: .word 0
sqanswer:  .word 0
 
.text
.globl main
.ent main

main:
li $v0, 4
la $a0, prompt  
syscall

li $v0, 5
syscall
move $t1, $v0   

li $v0, 4
la $a0, prompt2   
syscall

li $v0, 5
syscall
move $t2, $v0     

li $v0, 4
la $a0, prompt3  
syscall

li $v0, 5
syscall
move $t3, $v0    

addi $a0, $t2, 0

#lw $a0, prompt
#lw $a1, prompt2
jal power

sw $v0, answer
lw $s0, answer 

li $t4, 4
mul $t5, $t1, $t3   
mul $t5, $t5, $t4   
li $t6, 2
mul $t7, $t6, $t1
sub $a1, $s0, $t5   

jal iSqrt

sw $v1, sqanswer
lw $s3, sqanswer 


li $s1, -1
mul $s1, $t2, $s1   
add $s2, $s1, $s3   
div $s3, $s2, $t7

move $a0, $s3
la $v0, 1
syscall 

li $v0, 10
syscall

.end main


.globl power
.ent power

power:

mul $v0, $a0, $a0

jr $ra

.end power

.globl iSqrt
.ent iSqrt

iSqrt:

move $v1, $a1   
li $t0, 0   

sqrLoop:

div $t8, $a1, $v1
add $v1, $t8, $v1
div $v1, $v1, 2 
add $t0, $t0, 1
blt $t0, 20, sqrLoop

jr $ra

.end iSqrt

你试过调试吗?一步一步地完成每一条指令,并找到与预期不同的第一个地方。然后解决这个问题,继续这个过程,直到每一条指令都如你所期望的那样工作——然后你就会得到正确的答案。请提供一个你的问题的可复制的例子,因为它将帮助其他人回答你的问题。你能描述一下这个问题吗:什么不起作用?期望的输出是什么
li $v0,5
syscall
move $t1, $v0

li $v0,4
la $a0,prompt2
syscall

li $v0,5
syscall
move $t2, $v0

li $v0,4
la $a0,prompt3
syscall

li $v0,5
syscall
move $t3, $v0    

move $a0,$t2
jal power
move $t0, $v0

mul $t3,$t3,4
mul $t3, $t3,$t1
sub $t0, $t0, $t3

move $a0,$t0
jal sqrt
move $t0, $v0

sub $t0, $t0,$t2
mul $t1, $t1, 2
div $t0, $t0, $t1

li $v0,1
move $a0,$t0
syscall

li $v0, 10
syscall
.end main   
.data
prompt: .asciiz "Enter number 1: "
prompt2: .asciiz "Enter number 2: "
prompt3: .asciiz "Enter number 3: "
newline: .asciiz "\n"
answer: .word 0
sqanswer:  .word 0
 
.text
.globl main
.ent main

main:
li $v0, 4
la $a0, prompt  
syscall

li $v0, 5
syscall
move $t1, $v0   

li $v0, 4
la $a0, prompt2   
syscall

li $v0, 5
syscall
move $t2, $v0     

li $v0, 4
la $a0, prompt3  
syscall

li $v0, 5
syscall
move $t3, $v0    

addi $a0, $t2, 0

#lw $a0, prompt
#lw $a1, prompt2
jal power

sw $v0, answer
lw $s0, answer 

li $t4, 4
mul $t5, $t1, $t3   
mul $t5, $t5, $t4   
li $t6, 2
mul $t7, $t6, $t1
sub $a1, $s0, $t5   

jal iSqrt

sw $v1, sqanswer
lw $s3, sqanswer 


li $s1, -1
mul $s1, $t2, $s1   
add $s2, $s1, $s3   
div $s3, $s2, $t7

move $a0, $s3
la $v0, 1
syscall 

li $v0, 10
syscall

.end main


.globl power
.ent power

power:

mul $v0, $a0, $a0

jr $ra

.end power

.globl iSqrt
.ent iSqrt

iSqrt:

move $v1, $a1   
li $t0, 0   

sqrLoop:

div $t8, $a1, $v1
add $v1, $t8, $v1
div $v1, $v1, 2 
add $t0, $t0, 1
blt $t0, 20, sqrLoop

jr $ra

.end iSqrt