我在64位计算机上的Win7下使用 Cygwin 32位。
以下程序
runme: main.cpp asm.o
g++ main.cpp asm.o -o executable
asm.o: asm.asm
nasm -f elf asm.asm -o asm.o
section .data
hello: db 'Hello world!',10
helloLen: equ $-hello
section .bss
section .text
global _GetValueFromASM, _HelloWorld
_GetValueFromASM:
mov eax, 9
ret
_HelloWorld:
mov eax,4 ; 'write' system call = 4
mov ebx,1 ; file descriptor 1 = STDOUT
mov ecx,hello ; string to write
mov edx,helloLen ; length of string to write
int 80h ; call the kernel
ret
#include <iostream>
using namespace std;
extern "C" int GetValueFromASM();
extern "C" int HelloWorld();
int main()
{
HelloWorld();
cout<<"GetValueFromASM() returned = "<<GetValueFromASM()<<endl;
return 0;
}
给我以下错误:
me@my-PC ~/nasm/test of Intel syntax
$ make
nasm -f elf asm.asm -o asm.o
g++ main.cpp asm.o -o executable
me@my-PC ~/nasm/test of Intel syntax
$ ./executable
Segmentation fault (core dumped)
我不明白为什么会产生此错误。
如何摆脱这个问题?