Руководство Intel говорит, что:
- инструкция
syscall
неверна для режима совместимости (32-разрядная версия) -
popa
недействителен для 64-разрядного режима
Так есть причина, по которой NASM:
- дает ошибку компиляции
instruction not supported in 64-bit mode
, если я используюpopa
с-f elf64
- не дает ошибку компиляции, если я использую
syscall
с-f elf32
. Если я запустил исполняемый файл, я получаюIllegal instruction (core dumped)
, как и ожидалось.
Зачем обрабатывать эти два случая по-разному?
Протестировано с версией NASM версии 2.10.09 на Ubuntu 14.04 (должно быть неактивным).