为什么 syscall 在 NASM 32 位输出中编译,而 popa 在 64 位中不编译?

Why does syscall compile in NASM 32 bit output while popa does not compile in 64 bit?

Intel manual 说:

所以有没有理由 NASM:

为什么要区别对待这两种情况?

在 Ubuntu 14.04 上使用 NASM 版本 2.10.09 进行了测试(应该 OS 不可知论)。

因为 syscall 指令在 32 位模式的 AMD 处理器上也存在(并且有效)。从历史上看,Intel 使用 sysenter 指令,但是当 AMD 提出 6​​4 位扩展时,他们使用了自己的 syscall,因此当 Intel 接管扩展时,他们也开始支持 syscall , 但仅限于 64 位模式。