知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达
关于寄存器,我只能说了解并不精通。所以,大神可以划走咯。
1.介绍寄存器
32位Intel CPU所含有的寄存器
1.4个数据寄存器(EAX、EBX、ECX和EDX),也叫通用寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
寄存器AX和AL通常称为累加器,用累加器进行的操作可能需要更少时间。累加器可用于乘,除,输入/输出等操作,它们的使用频率很高;
寄存器BX称为基地址寄存器。它可作为存储器指针来使用;
寄存器CX称为计数寄存器。在循环和字符串操作时,要用它来控制循环次数;在位操作
中,当移多位时,要用CL来指明移位的位数;
寄存器DX称为数据寄存器。在进行乘、除运算时,它可作为默认的操作数参与运算,也
可用于存放I/O的端口地址。
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
2.变址寄存器,32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器,它们主要用于存放存储单元在段内的偏移量,
3、指针寄存器32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。
ESP:栈顶指针 EBP:栈底指针
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
5.段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
CPU内部的段寄存器:
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
6特殊寄存器
1)PC寄存器(Program Counter Register):又称为指令地址寄存器(Instruction Address Register),用来存放下一条需要执行的计算机指令的内存地址。
2)指令寄存器(Instruction Register):用来存放当前正在执行的指令。
3)状态寄存器(Status Register):用来存放CPU算术或逻辑运算之后CPU状态(即标志位Flag)的寄存器,例如:是否有进位/借位、结果为零。
2,寄存器怎么在程序中起作用
根据冯诺依曼体系结构可得如图,当然还有很多其他细节,不在此讨论 。