การแปลง code จาก C Function เป็น MIPS Assembly code
Code C Function
int factorial( int n ){
int f = 1;
if(n == 0) return 1;
do{
f = f * n;
n--;
while( n != 0 );
return f;
}
แปลง code จาก C Function ให้เป็น MIPS assembly code
fact:
add $a0 , $zero , 5
addi $v0 , $zero , 1
jal loop
jal exit
loop:
mul $v0 , $v0 , $a0
addi $a0 , $a0 , -1
bne $a0 , $zero , loop
jr $ra
exit:
Code C Function
int fact( int n ){
if ( n == 0 ) return 1;
else return n * fact( n – 1 );
}
แปลง code จาก C Function ให้เป็น MIPS assembly code
จาก Source code ของ MIPS ทำการประกาศ ฟังก์ชั่นชื่อว่า fact ภายในฟังก์ชั่น จะกำหนด stack เพื่อ save ค่า ของ ตัวแปรที่รับเข้ามา คือ n และ register ที่จะ return กลับไป
fact:
addi $sp, $sp, -8
sw $ra, 4($sp)
sw $a0, 0($sp)
เทียบค่าค่าที่รับเข้ามาถ้าไม่เท่ากับ 0 ให้ไปี่ L1
bne $t0, $zero, L1
ถ้าค่าที่รับเข้ามาเท่ากับ 0 จะทำการ return ค่า 1 เก็บค่า 2 ค่าเข้ามาใน stack และคืนค่าไปที่ function
addi $v0, $zero, 1
addi $sp, $sp, 8
jr $ra
ถ้า n ไม่เทากับ 0 ให้ n เท่ากับ n-1 จากนั้น reurn ค่าไปที่ function fact
L1: addi $ao, $ao, -1
jal fact
lw $ao, 0($sp)
lw $ra, 4($sp)
addi $sp, $sp, 8
คูณค่า return n * Fact(n-1)
mul $v0, $a0, $v0
return ค่าไปที่ function
jr $ra
ไม่มีความคิดเห็น:
แสดงความคิดเห็น