0

数値を指定すると、このプログラムは階乗を計算しますが、9 より大きい数値では機能しなくなりました

.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

プログラムをコンパイルして実行した後、echo $? 結果を返す必要がありますが、これは正しい結果ではなく 0 を返しています。このコードの何が問題なのか知っている人はいますか?

4

1 に答える 1

2

プログラムの終了値はサイズに制限があるようです。最大値は 255 だと思うので、sys_write などを libc から使用する必要があります。

于 2010-10-17T18:27:36.240 に答える