根据英特尔® 64 位和 IA-32 架构软件开发人员手册第 2 卷,pop fs支持 3 种变体(同样适用于pop gs):
AMD64 文档操作pop没有明确描述堆栈指针会发生什么。我试图生成这些,似乎 gas 确实能识别它们(我认为它们需要 66h 前缀):
80490d6: 0f a1 pop fs
80490d8: 66 0f a1 popw fs
80490db: 0f a9 pop gs
80490dd: 66 0f a9 popw gs
Run Code Online (Sandbox Code Playgroud)
我正在为这些头疼。据我了解,FS 和 GS 寄存器是 16 位,我知道它们有一个隐藏部分,但我不希望pop指令能够操作这些对吗?有人可以解释这些变体的目的是什么吗?