我对汇编编程非常陌生并且学习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
选项。