这里简要介绍下8086的寄存器和 Linux0.11源码
硬件知识
8086CPU结构图
8086内部的寄存器可以分为通用寄存器和专用寄存器两大类,专用寄存器包括指针寄存器、变址寄存器等
通用寄存器有8个,又可以分成2组,一组是数据寄存器(4个),另一组是指针寄存器及变址寄存器(4个)。
-
数据寄存器
8086有4个16位的通用寄存器(AX、BX、CX、DX),可以存放16位的操作数,也可分为8个8位的寄存器(AL、AH;BL、BH;CL、CH;DL、DH)来使用。其中AX称为累加器,BX称为基址寄存器,CX称为计数寄存器,DX称为数据寄存器,这些寄存器在具体使用上有一定的差别,。
数据寄存器分为:
AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。
BH&BL=BX(base):基址寄存器,常用于地址索引;
CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。
DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位:AH,BH,CH,DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。另一组是指针寄存器和变址寄存器,包括:
这4个16位寄存器只能按16位进行存取操作,主要用来形成操作数的地址,用于堆栈操作和变址运算中计算操作数的有效地址。
指针寄存器
系统中有两个16位的指针寄存器SP和BP,其中SP是堆栈指针寄存器,由它和堆栈段寄存器SS一起来确定堆栈在内存中的位臵;BP是基数指针寄存器,通常用于存放基地址。
SP(StackPointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;
BP(BasePointer):基址指针寄存器,可用作SS的一个相对基址位置;变址寄存器
系统中有两个16位的变址寄存器SI和DI,其中SI是源变址寄存器,DI是目的变址寄存器,都用于指令的变址寻址方式。
SI(SourceIndex):源变址寄存器可用来存放相对于DS段之源变址指针;
DI(DesTInaTIonIndex):目的变址寄存器,可用来存放相对于ES段之目的变址指针。段寄存器
系统中共有4个16位段寄存器,即代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES。这些段寄存器的内容与有效的地址偏移量一起,可确定内存的物理地址。通常CS划定并控制程序区,DS和ES控制数据区,SS控制堆栈区。
Linux0.11源码介绍
参考图书:<<Linux内核完全注释>>
linux0.11发布日期为:1991.12.8
Linux0.11目录结构为
Linux源码模块划分非常清晰
boot文件夹是linux启动模块,包含三个汇编文件。
内核初始化程序目录 init
该目录中仅包含一个文件 main.c 。用于执行内核所有的初始化工作,然后移到用户模式创建新进程,并在控制台设备上运行 shell 程序。
kernel 目录是内核主程序,该目录比较复杂。截图如下:
fs 是文件系统模块,包含17个文件
linux0.11每个目录和文件的详细介绍可以参考<<Linux内核完全注释>>第二章