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汇编代码:
.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,那么把它平方后拆成相邻的两个整数为