syscall
指令对兼容模式(32位)无效popa
对64位模式无效NASM是否有原因:
instruction not supported in 64-bit mode
与popa
一起使用,则-f elf64
如果我将syscall
与-f elf32
一起使用,则Illegal instruction (core dumped)
。 为什么要区别对待这两种情况?
在Ubuntu 14.04上使用NASM版本2.10.09进行测试(应与操作系统无关)。
答案 0 :(得分:3)
因为syscall
指令在32位模式的AMD处理器上存在(并且有效)。从历史上看,英特尔使用sysenter
指令,但当AMD提出64位扩展时,他们使用了自己的syscall
,因此当英特尔接管扩展时,他们也开始支持syscall
,但仅限64位模式。