此代码中的什么导致Seg故障?

时间:2014-12-18 12:25:13

标签: segmentation-fault nasm

我对汇编编程非常陌生并且学习NASM我决定尝试编写素数测试。我在32位精灵NASM中编写了is_prime函数的代码,并在c ++中编写了一个使用externs NASM函数的包装器。当我将两个程序编译到.o文件时没有错误,当我链接目标文件以生成可执行文件时,它正确链接。但是,当我尝试运行它时,我不断收到Segmentation Fault错误,我不知道这实际意味着什么或如何纠正它。我在NASM中编写的代码如下所示:

section .bss
    n: resb 1
    i: resb 1
    m: resb 1
section .text
    global is_prime
is_prime:
    push ebp
    mov ebp,esp
    mov eax,[ebp + 8]
    jmp main
main:
    mov [n],eax
    mov byte [i],2
    mov eax,[i]
    mov ebx,[n]
    cmp eax,ebx
    jge prime
    mov eax,[i]
    mov ebx,[n]
    call mod
    cmp byte [m],0
    je comp
    jmp main
mod:
    mov ecx,ebx
    xor edx,edx
    div ecx
    mov [m],edx
    ret
comp:
    mov eax,0
    jmp kill
prime:
    mov eax,1
    jmp kill
kill:
    ret
    leave

我的主要问题是,我在汇编程序中做错了导致此错误,如果是,我该如何解决这个问题?或者我链接/编译它的方式有什么问题吗?我使用的是64位Ubuntu,但我在编译时使用了-m32-f elf32选项。

0 个答案:

没有答案