Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.5k views
in Technique[技术] by (71.8m points)

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

The Intel manual says that:

  • the syscall instruction is invalid for compatibility mode (32-bit)
  • popa is invalid for 64-bit mode

So is there a reason why NASM:

  • gives a compilation error instruction not supported in 64-bit mode if I use popa with -f elf64
  • does not give give a compilation error if I use syscall with -f elf32. If I run the executable I get Illegal instruction (core dumped) as expected.

Why treat those two cases differently?

Tested with NASM version 2.10.09 on Ubuntu 14.04 (should be OS agnostic).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Because the syscall instruction exists (and works) on AMD processors in 32 bit mode too. Historically, Intel used the sysenter instruction, but when AMD came up with the 64 bit extension, they used their own syscall and so when Intel took over the extensions, they also started supporting syscall, but only in 64 bit mode.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...