阅读英特尔的大手册,我看到如果你想从一个远调用返回,即对另一个代码段中的过程的调用,你只需发出一个返回指令(可能带有一个立即参数,将堆栈指针向上移动 n指针弹出后的字节)。
显然,如果我解释正确,这足以让硬件将段选择器和偏移量弹出到正确的寄存器中。
但是,系统如何知道返回应该是远返回并且需要弹出偏移量和选择器?
如果硬件只是弹出偏移量指针而不是它之后的选择器,那么您将指向正确的偏移量但错误的段。
与近返回版本相比,远返回命令没有什么特别之处。
据我所知,它们看起来都一样。
然后我假设处理器,可能在微架构级别,跟踪哪些调用是远的,哪些是近的,以便当它们从返回时,系统知道要弹出多少字节以及在哪里弹出它们(指针寄存器和段选择器寄存器)。
我的假设正确吗?
大家对这个机制了解多少?