ה*לה אורח
![אורח](forum_images/0_star_rating.gif)
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 04 September 2007 בשעה 10:13 | | IP רשוּם
|
|
|
|
איך אני הופכת את התכנית כך שתתבצע כפרוצדורה= תשלח לפרוצדורה את valN ותחזיר את max בתוך $v0, ואת count בתוך $v1??
[CODE]
.data
str: .asciiz ","
str1: .asciiz "\n"
count: .word 0
max: .word 0
valN: .word 15
.text
main:
lw $s1, valN
lw $s2, count
lw $s3, max
la $s4, str
la $s5, str1
li $t1, 0 # x
li $t2, 0 # y
li $t3, 0 # z
mult $s1, $s1
mflo $t7
add $t7, $t7, $t7 # 2*N^2
Loopx:
addi $t1, $t1, 1 # x++
li $t2, 0 # y=0
slt $t0, $t1, $s1
beq $t0, $zero, Exit
Loopy:
addi $t2, $t2, 1 # y++
li $t3, 0 # z=0
slt $t0, $t2, $s1
beq $t0, $zero, Loopx
Loopz:
addi $t3, $t3, 1 # z++
slt $t0, $t3, $t7
beq $t0, $zero, Loopy
mult $t1, $t1 # x^2
mflo $t4
mult $t2, $t2 # y^2
mflo $t5
mult $t3, $t3 # z^2
mflo $t6
add $t0, $t4, $t5
bne $t0, $t6 , Loopz # if(x^2+y^2==z^2)
print:
li $v0, 1
move $a0, $t1
syscall
li $v0, 4
la $a0, str
syscall
li $v0, 1
move $a0, $t2
syscall
li $v0, 4
la $a0, str
syscall
li $v0, 1
move $a0, $t3
syscall
li $v0, 4
la $a0, str1
syscall
addi $s2, $s2, 1 # count++
slt $t0, $s3, $t3 # if(z<max)
beq $t0, $zero, Loopz
add $s3, $t3, $s0 # max =z
j Loopz
Exit:
li $v0, 4
la $a0, str1
syscall
li $v0, 1 # print max
move $a0, $s3
syscall
li $v0, 4
la $a0, str1
syscall
li $v0, 1 # print count
move $a0, $s2
syscall
li $v0, 10
syscall # end of program
|
[CODE/]
|