我正在阅读Robert Love的《Linux内核开发》一书,但不理解这段汇编代码的作用。
在每个进程内核栈中,都有一个位于栈末的struct thread_info
结构体。在x86架构上,我们可以通过以下汇编语言获取它(假设栈大小为8KB):
movl $-8192, %eax
andl %esp, %eax
基本上是将堆栈指针与0xffffe000进行AND运算。我不明白这里到底发生了什么?我不明白为什么屏蔽%esp
的最低有效的13位就可以让我们访问结构体。我知道一旦解释清楚,我会感到很愚蠢的,但它一直在困扰着我。
谢谢。