Can anyone help me in writing Ackermann Function function in assembly language. I'm using MIPS and the function needs to be Recursive.
h**p://img41.imageshack.us/img41/9972/akermannfunction.jpg
|
Invasive contributor
|
![]() |
| 24Sep2009,02:15 | #2 |
|
go easy on the fonts buddy
|
|
Mentor
|
![]() |
| 24Sep2009,03:47 | #3 |
|
We won't write it for you. How far have you got and where are you stuck?
|
|
Go4Expert Member
|
|
| 7Oct2009,09:53 | #4 |
|
here guys I was able to write the C program .. but m having trouble writing the MIPS version of it... I'm having difficulty using the stack pointer and what not...
this is what I have so far C code Code:
#include<stdio.h>
#include<conio.h>
int AckFun(int,int);
void main()
{
int result,m,n;
clrscr();
printf("Enter the positive integer values of m and n : ");
scanf("%d %d",&m,&n);
result=AckFun(m,n);
printf("\nThe value of A(%d,%d) = %d",m,n,result);
getch();
}
int AckFun(int m,int n)
{
int send;
if(m==0)
{
if(n==0)
send=1;
else
send=n+1;
}
else if(n==0)
send=AckFun(m-1,1);
else
send=AckFun(m-1,AckFun(m,n-1));
return=send;
}
Code:
main: li $so, 3 # m = s0 = a0 li $s1, 3 # n = s1 = a1 add $a0, $s0, 0 add $a1, $s1, 0 jal ackermann move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall ackermann: addi $sp, $sp, -8 sw $s0, 4($sp) sw $ra, 0($sp) case_one: bne $a0, 0, case_two |
|
Go4Expert Member
|
|
| 7Oct2009,10:22 | #5 |
|
this is how far I have reached
Code:
main: li $a0, 3 # m = a0 li $a1, 3 # n = a1 jal ackermann move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall ackermann: addi $sp, $sp, -8 sw $ra, 4($sp) sw $a1, 0($sp) bne $a0, 0, other add $v0, $a0, 1 lw $ra, 4($sp) addi $sp, $sp, 8 jr $ra other: bne $a1, 0, other_two addi $a0, $a0, -1 jal ackermann other_two: addi $a1, $a1, -1 jal ackermann addi $a1, $v0, 0 addi $a0, $a0, -1 jal ackermann |
|
Go4Expert Member
|
|
| 7Oct2009,11:44 | #6 |
|
k..now m stuck here
Code:
main: li $a0, 3 # m = 3 li $a1, 3 # n = 3 jal ackermann move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall ackermann: addi $sp, $sp, -12 # creating space on the stack (3 columns) sw $a0, 4($sp) # saving origional m sw $a1, 8($sp) # saving origional n sw $ra, 0($sp) # saving origional caller return address ERROR ON THIS LINE case_one: # m = 0 bne $a0, 0, case_two add $v0, $a1, 1 j exit case_two: # n = 0 bne $a1, 0, case_three addi $a0, $a0, -1 li $a1, 1 jal case_one case_three: addi $a1, $a1, -1 jal ackermann addi $a1, $v0, 0 addi $a0, $a0, -1 jal case_one exit: lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra |
|
Mentor
|
![]() |
| 7Oct2009,12:13 | #7 |
|
Well, if you're in your final semester, you should already know that the exact error message is rather essential in helping identifying the cause of the problem. So why not tell us what the error message is instead of just saying "error on this line".
|
|
Go4Expert Member
|
|
| 7Oct2009,19:29 | #8 |
|
my expertise is not in programming but in analog circuit designing, DSP etc... I dont want the solution, just a better explanation why's there a error on that line
|
|
Mentor
|
![]() |
| 7Oct2009,20:06 | #9 |
|
Well, how do we know if we don't know what the error is.
OK, let me say it straight. TELL US THE ERROR. |
|
Go4Expert Member
|
|
| 7Oct2009,20:23 | #10 |
|
main:
li $a0, 3 # m = 3 li $a1, 3 # n = 3 jal ackermann move $a0, $v0 li $v0, 1 syscall li $v0, 10 syscall ackermann: addi $sp, $sp, -12 # creating space on the stack (3 columns) sw $a0, 4($sp) # saving origional m sw $a1, 8($sp) # saving origional n sw $ra, 0($sp) # saving origional caller return address ERROR HERE case_one: # m = 0 bne $a0, 0, case_two add $v0, $a1, 1 j exit case_two: # n = 0 bne $a1, 0, case_three addi $a0, $a0, -1 li $a1, 1 jal case_one case_three: addi $a1, $a1, -1 jal ackermann addi $a1, $v0, 0 addi $a0, $a0, -1 jal case_one exit: lw $ra, 0($sp) addi $sp, $sp, 12 jr $ra |


