Руководство 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 (должно быть неактивным).