spim 汇编达人 请进!!!

来源:百度知道 编辑:UC知道 时间:2024/06/06 20:31:52
我用pcspim编了一个 找出 1到1000的所有勾股熟的程序 但是 每当运行到 a=252,b=405,c=477时程序就停止了 只有继续运行才能继续spim才往下算
我不明白程序为什么停下,难道是我的程序有问题?以下是我spim汇编代码:

.text
.globl main

main:
la $t0,value
li $v0,4
la $a0,str4
syscall
lw $t1,0($t0) #t1存c
lw $t2,4($t0) #t2存a
lw $t3,8($t0) #t3存b
loopc:
slti $t4,$t1,1001
beq $t4,$zero,exitc
move $t2,$zero
addi $t2,$t2,1 # a初始化为1
loopa:
slti $t4,$t2,1001
beq $t4,$zero,exita
addi $t3,$t2,1 #b=a+1
loopb:

slti $t5,$t3,1001
beq $t5,$zero,exitb
mul $s0,$t1,$t1 #s0 存放 c*c
mul $s1,$t2,$t2 #s1存放 a*a
mul $s2,$t3,$t3 #s2 存放 b*b
add $s3,$s1,$s2
bne $s0,$s3,else #判断 c*c==b*b+a*a

#######若相等则打印出 a b c的值
li $v0,4
la $a0,str1
syscall

li $v0,1
move $a0,$t2

不懂spim 汇编

在直角三角形中,若以a、b表示两条直角边,c表示斜边,勾股定理可以表述为a2+b2=c2。

满足这个等式的正整数a、b、c叫做一组勾股数。

例如(3、4、5),(5、12、13),(6、8、10),(7、24、25)等一组一组的数,每一组都能满足a2+b2=c2,因此它们都是勾股数组(其中3、4、5是最简单的一组勾股数)。显然,若直角三角形的边长都为正整数,则这三个数便构成一组勾股数;反之,每一组勾股数都能确定一个边长是正整数的直角三角形。因此,掌握确定勾股数组的方法对研究直角三角形具有重要意义。

1.任取两个正整数m、n,使2mn是一个完全平方数,那么

c=2+9+6=17。

则8、15、17便是一组勾股数。

证明:

∴a、b、c构成一组勾股数

2.任取两个正整数m、n、(m>n),那么

a=m2-n2,b=2mn,c=m2+n2构成一组勾股数。

例如:当m=4,n=3时,

a=42-32=7,b=2×4×3=24,c=42+32=25

则7、24、25便是一组勾股数。

证明:

∵ a2+b2=(m2-n2)+(2mn)2

=m4-2m2n2+n4+4m2n2

=m4+2m2n2+4n2

=(m2+n2)2

=c2

∴a、b、c构成一组勾股数。

3.若勾股数组中的某一个数已经确定,可用如下的方法确定另外两个数。

首先观察已知数是奇数还是偶数。

(1)若是大于1的奇数,把它平方后拆成相邻的两个整数,那么奇数与这两个整数构成一组勾股数。

例如9是勾股数中的一个数,

那么9、40、41便是一组勾股数。

证明:设大于1的奇数为2n+1,那么把它平方后拆成相邻的两个整数为