【发布时间】:2023-03-29 11:20:01
【问题描述】:
我目前正在阅读 Robert Love 的“Linux Kernel Development”,但我不明白这部分汇编在做什么。
基本上,在每个进程内核堆栈中,都有一个struct thread_info,它位于堆栈的末尾。现在,在 x86 架构上,我们显然可以通过使用以下程序集来获取它(假设堆栈大小为 8KB)
movl $-8192, %eax
andl %esp, %eax
所以基本上是通过 0xffffe000 对堆栈指针进行与运算。我很困惑这里发生了什么?我不明白为什么屏蔽 %esp 的最低有效 13 位会将我们带到结构。我知道一旦被解释我会觉得很愚蠢,但这让我很烦。
谢谢。
【问题讨论】:
-
我正在读这本书,我还有一个更基本的问题:你怎么知道
-8192是0xffffe000?负数如何存储在 CPU 的寄存器中? -
@patryk.beza 负数存储在1和2的补码Read more here