我的简单asm程序段故障

时间:2016-05-02 03:50:24

标签: linux assembly x86 gas att

我是asm的新手,我正在编写一个非常简单的asm代码,例如2 ^ 3 + 5 ^ 2,但是会出现段错误。

我使用了gdb并找到了引发段错误的地方,但无法理解原因。

我的平台是CentOS 7。

这是我的代码:

.code32
.section .data
.section .text

.globl _start
_start:
        pushl $3
        pushl $2
        call power
        addl $8, %esp
        pushl %eax
        pushl $2
        pushl $5
        call power
        addl $8, %esp
        popl %ebx
        addl %eax, %ebx
        movl $1, %eax
        int $0x80

.type power, @function
power:
        pushl %ebp
        movl %esp, %ebp
        subl $4, %esp
        # segment fault?
        # this line get segment fault
        movl 8(%ebp), %eax
        movl 12(%ebp), %ecx
        movl %ebx, -4(%ebp)

    power_loop_start:
        cmpl $1, %ecx
        je end_power
        movl -4(%ebp), %eax
        imull %ebx, %eax
        movl %eax, -4(%ebp)
        decl %ecx
        jmp power_loop_start

    end_power:
        movl -4(%ebp), %eax
        movl %ebp, %esp
        popl %ebp
        ret

0 个答案:

没有答案