Я работаю над проектом, который реализует функцию в сборке, которая вызывается в файле main.c. Объявление функции подписи в C: void strrev(char *str) ;
Инструкция Ret дает мне недопустимую ошибку инструкции. Почему? Я делаю это впервые.
Попытка опубликовать только соответствующий код:
SECTION .text
global strrev
strrev:
push ebp
mov ebp, esp
push esi
push edi
push ebx
// doing things with al, bl, ecx, edi, and esi registers here
// restore registers and return
mov esp, ebp
pop ebx
pop edi
pop esi
pop ebp
ret
Ошибка:
(gdb)
Program received signal SIGILL, Illegal instruction.
0xbffff49a in ?? ()
Компиляция и компоновка таким образом:
nasm -f elf -g strrepl.asm
nasm -f elf -g strrev.asm
gcc -Wall -g -c main7.c
gcc -Wall -g strrepl.o strrev.o main7.o