Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Assembly Language Programming (ALP) Forum (http://www.go4expert.com/forums/assembly-language-programming-forum/)
-   -   Ackermann Function (http://www.go4expert.com/forums/ackermann-function-t19526/)

final_semester 23Sep2009 08:55

Ackermann Function
 
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

nimesh 24Sep2009 02:15

Re: Ackermann Function
 
go easy on the fonts buddy

xpi0t0s 24Sep2009 03:47

Re: Ackermann Function
 
We won't write it for you. How far have you got and where are you stuck?

final_semester 7Oct2009 09:53

Re: Ackermann Function
 
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;
}

MIPS code
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


final_semester 7Oct2009 10:22

Re: Ackermann Function
 
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


final_semester 7Oct2009 11:44

Re: Ackermann Function
 
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


xpi0t0s 7Oct2009 12:13

Re: Ackermann Function
 
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".

final_semester 7Oct2009 19:29

Re: Ackermann Function
 
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

xpi0t0s 7Oct2009 20:06

Re: Ackermann Function
 
Well, how do we know if we don't know what the error is.

OK, let me say it straight. TELL US THE ERROR.

final_semester 7Oct2009 20:23

Re: Ackermann Function
 
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


All times are GMT +5.5. The time now is 18:30.