2010-10-17 17 views
0

Compte tenu d'un certain nombre, ce programme calcule le factoriel, mais il ne fonctionne longtemps avec un nombre plus grand que 9avec le code asm, le calcul du factoriel

.section .data 
.section .text 
.globl _start 

_start: 
pushl $10 
movl %eax, %ebx 

call func 
addl $4, %esp 
movl %eax, %ebx 

movl $1, %eax 
int $0x80 

.type func,@function 

func: 
    pushl %ebp 
    movl %esp, %ebp 
    movl 8(%ebp), %eax 
    cmpl $1, %eax 
    je fim_loop 
    decl %eax 
    pushl %eax 
    call func 
    movl 8(%ebp), %ebx 
    imull %ebx, %eax 

    fim_loop: 
     movl %ebp, %esp 
     popl %ebp 
     ret 

après compilation et exécuter le programme, echo $? devrait renvoyer le résultat, mais cela renvoie 0 au lieu du bon résultat, quelqu'un sait ce qui ne va pas avec ce code?

Répondre

2

semble la valeur de sortie d'un programme est limité en taille, je pense que la valeur la plus élevée est de 255, donc je devrais utiliser SYS_write ou quelque chose de libc

+0

Pourriez-vous poster le code final? – jyz