您的位置:首页 > 其它

聚集索引与非聚集索引的区别

2014-02-27 21:36 232 查看
Linux把整个的虚拟存贮空间自上而下分为系统空间,堆栈空间,数据段和代码段。当系统访问页面异常时,cpu将失败的线性地址保存在CR2中。同时还会传来两个参数pt_regs和error_code。前者保存了异常发生前夕各寄存器的一个副本。

 

struct pt_regs {
long ebx;
long ecx;
long edx;
long esi;
long edi;
long ebp;
long eax;
int  xds;
int  xes;
long orig_eax;
long eip;
int  xcs;
long eflags;
long esp;
int  xss;
};

 各寄存器的含义如下:

eax,ebx,ecx,edx----数据寄存器,其中eax是累加器;

esi,edi---变址和指针寄存器;

esp,ebp----指针寄存器;

eip---- 指令指针寄存器;

eflags----标志寄存器;

xcs,xds,xes,xss---段寄存器,code,data,stack,specail。

orig_eax 有特殊的用途,我们将在以后的文章中进行讨论。

 

Note:

80386有如下寄存器:

8个32-bit寄存器 %eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp;

8个16-bit寄存器,它们事实上是上面8个32-bit寄存器的低16位:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp;

8个8-bit寄存器:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。它们事实上是寄存器%ax,%bx,%cx,%dx的高8位和低8位;

6个段寄存器:%cs(code),%ds(data),%ss(stack), %es,%fs,%gs;

3个控制寄存器:%cr0,%cr2,%cr3;

6个debug寄存器:%db0,%db1,%db2,%db3,%db6,%db7;

2个测试寄存器:%tr6,%tr7;

8个浮点寄存器栈:%st(0),%st(1),%st(2),%st(3),%st(4),%st(5),%st(6),%st(7)。

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: