1.Translate a C function to calculate a factorial value below into a MIPS
assembly code.
int factorial( int n ){
int f = 1;
if(n == 0) return 1;
do{
f = f * n;
n--;
while( n != 0 );
return f;
}
----------------------
fac:
add $a0 , $zero , 5 # กำหนดค่า parameter ตัวแรก ให้เป็น 5
addi $v0 , $zero , 1
jal loop
jal exit
loop:
mul $v0 , $v0 , $a0 # เก็บค่าของตัวแปรที่ return จากฟังก์ชันให้เป็น $v0
addi $a0 , $a0 , -1
bne $a0 , $zero , loop
jr $ra
exit:
2. Translate a C function to calculate a factorial value below into a MIPS
assembly code.
int fact( int n ){
if ( n == 0 ) return 1;
else return n * fact( n – 1 );
}
-----------------------------addi $a0,$a0,5
jal factorial
li $v0, 10
syscall
factorial:
addi $sp,$sp,-8
sw $a0,4($sp)
sw $ra,0($sp)
beq $a0,$zero,F1
sub $a0,$a0,1
jal factorial
lw $a0,4($sp)
add $a1,$v0,$zero
jal multiply
lw $ra,0($sp)
lw $a0,4($sp)
add $sp,$sp,8
jr $ra
F1:
addi $v0,$zero,1
add $sp,$sp,8
jr $ra
multiply:
add $t0,$zero,$zero
n_loop:
beq $a1,$zero,m_eol
add $t0,$t0,$a0
subi $a1,$a1,1
j n_loop
m_eol:
add $v0,$t0,$zero
jr $ra
-------------------
ไม่มีความคิดเห็น:
แสดงความคิดเห็น