Перевод рекурсивной функции C в сборку Y86 - PullRequest
0 голосов
/ 07 декабря 2018

Я новичок в программировании на ассемблере, и я пытаюсь преобразовать функцию, написанную в c, в код ассемблера Y86.Это то, что у меня есть, но я знаю, что это неправильно.Я начал с написания ассемблерного кода для одного параметра, но затем, когда я пытаюсь получить 2 параметра, я не понимаю, что делать.Я мог бы использовать некоторую помощь.Скажем, х = 5 и у = 1.

int rec_mult (int x, int y){
    if(y==1){
       return x;
    }
    else{
       return x + rec_mult(x, y-1);
    }
}

esi = x and ecx = y    
rec_mult:
    pushl %ebp
    rrmovl %esp,%ebp
    mrmovl 8(%ebp),%ecx 
    mrmovl 12(%ebp),%esi
    irmovl $1,%edx      
    rrmovl %ecx,%eax    
    subl %ecx,%edx      
    je rec_multend

    rrmovl %ecx,%edi
    irmovl $1,%edx      
    subl %edx,%edi      

    pushl %ecx      
    pushl %edi      
    call rec_mult       
    popl %edi
    popl %ecx

    addl %esi,%eax  

rec_multend:
    popl %ebp
    ret
...