Эксперементирую с использованием NASM-овских функций в C++ коде и наткнулся на странную проблему. Компилю и запускаю программу (все исходники в конце поста): Код (Text): $ nasm -g -f elf -o test_a.o test.asm $ g++ -g test.cpp test_a.o -o test $ ./test Input two digits: 1 2 Segmentation fault (core dumped) Стал разбираться - залез в gdb и увидел такую картину: Код (Text): (gdb) disas summ Dump of assembler code for function summ: 0x80485f0 <summ>: push %bp 0x80485f2 <summ+2>: mov %sp,%bp 0x80485f5 <summ+5>: addr16 mov 8(%bp),%eax 0x80485f9 <summ+9>: addr16 add 12(%bp),%eax 0x80485fd <summ+13>: pop %bp 0x80485ff <summ+15>: ret End of assembler dump. Я так понял, что Segmentation fault происходит из-за addr16, но откуда она взялась? В исходнике ничего подобного нет, <font color="red]КАК С ЭТИМ БОРОТЬСЯ????</font><!--color--> :o test.cpp: Код (Text): #include<stdio.h> extern "C" int summ(int, int); int main() { int a, b, c; printf("Input two digits: "); scanf("%d%d",&a,&b); c = summ(a,b); printf("%d+%d=%d\n",a,b,c); return 0; } test.asm: Код (Text): global summ:function %define first bp+08h %define second bp+0Ch summ: push bp mov bp, sp mov eax, [first] add eax, [second] pop bp ret