书上有两行代码
movl $-8192, $eax
andl $esp,$eax
current
在x86上是用最低位13位作掩码找到到8KB的底部,获得thread_info的位置.
但是-8192的二进制不是10,0000,0000,0000么?按道理说掩码应该是1,1111,1111,1111不是么?我一直以为是我补码算不对,不过确定又确定还是得不出13个1,这里到底应该如何理解?
#include <stdio.h>
int main()
{
int a=-8192;
printf("%x",a);
}
这段代码在64位上是fffe000
,说明高位的都是1,这里理解反了,应该是1111,...,1110,0000,0000,0000这样的掩码.