处理器,内存和指令

寄存器和算数逻辑部件

在这里插入图片描述
  处理器的底部或者四周,有大量的引脚,可以接受从外面来的电信号,或者向外发出电信号。这些引脚有很多,其中一部分用来将参数与运算的数字送入处理器的内部。有些引脚是用来复用的,假如现在要进行加法运算,那么我们要重复使用这些引脚,来依次将被加数和加数送入。
  一旦被加数通过引脚送入处理器,代表这个二进制数字的一组电信号就会出现在与引脚相连的内部线路上。这是一排高低电平的组合,代表着二进制数中的每一位。这时候,必须用一个称为寄存器(Register)的电路锁住。之所以要这样做,是因为相同的引脚和线路马上还要用于输入加数。也正是因为这个原因,这些内部线路称为处理器内部总线
  寄存器是双向器件,可以在一端接受输入并加以锁存,同时,它也会在另一端产生一模一样的输出。与寄存器 RA 和 RB 相连的,是算术逻辑单元,或者算术逻辑部件(Arithmetic LogicUnit,ALU),也就是图 2-2 中的桶形部分。它是专门负责运算的电路,可以计算加法、减法或者乘法,也可做逻辑运算。在这里,我们要求它做一次加法。
  一旦寄存器 RA 和 RB 锁存了参与运算的两个数,算术逻辑部件就会输出相加的结果,这个结果可以临时用另外一个寄存器 RC 锁存,稍后再通过处理器数据总线送到处理器外面,或者再次送入 RA 或 RB。
  8 位寄存器可以容纳 8 比特(bit),或者说 1 字节(Byte),这是因为

  • 1 byte = 8 bit

  另外,我们还要为这个字节的每一位编上号,编号是从右往左进行的,从 0 开始,分别是0、1、2、3、4、5、6、7。在这里,位 0(第 1 位)是最低位,在最右边;位 7(第 8 位)是最高位,在最左边。
  16 位寄存器可以存放 2 个字节,这称为 1 个字(word),各个数位的编号分别是 0~15,其中 0~7 是低字节,8~15 是高字节。实际上,“字”的概念出现得很早,也并非指 16 个比特。只是到了后来,才特指 16 个二进制位的长度。
  32 位寄存器可以存放 4 个字节,这称为 1 个双字(double word),各个数位的编号分别是 0~31,其中 0~15 是低字,16~31 是高字。
  尽管图中没有画出,但是 64 位寄存器可以容纳更多的比特,也就是 8 个字节,或者 4 个字。位数越多,寄存器所能保存的数越大,这是显而易见的。
在这里插入图片描述

内存储器

  内存按字节来组织,单次访问的最小单位是 1 字节,这是最基本的存储单元。如图中所示,每个存储单元中,各位的编号分别是 0~7。
  内存中的每字节都对应着一个地址,如图 2-5 所示,第 1 个字节的地址是 0000H,第 2 个字节的地址是 0001H,第 3 个字节的地址是 0002H,其他依次类推。注意,这里采用的是十六进制表示法。作为一个例子,因为这个内存的容量是 65536 字节,所以最后一个字节的地址是
FFFFH。
  为了访问内存,处理器需要给出一个地址。访问包括读和写,为此,处理器还要指明,本次访问是读访问还是写访问。如果是写访问,则还要给出待写入的数据。
  在这里插入图片描述

  8 位处理器包含 8 位的寄存器和算术逻辑部件,16 位处理器拥有 16 位的寄存器和算术逻辑部件,64 位处理器则包含 64 位的寄存器和算术逻辑部件。尽管内存的最小组成单位是字节,但是,经过精心的设计和安排,它能够按字节、字、双字和四字进行访问。换句话说,仅通过单次访问就能处理 8 位、16 位、32 位或者 64 位的二进制数。

指令和指令集

  指令就是用某些数来表示处理器所进行的操作,这称为指令(instruction),或者机器指令,因为只有处理器才认得它们。一般来说,指令由操作码和操作数构成,但也有小部分指令仅有操作码,而不含操作数。
对于inter处理器来说,如果访问内存中的一个字,那么,它规定高字节位于高地址部分,低字节位于低地址部分,这称为低端字节序(Little Endian)。
  指令和非指令的普通二进制数是一模一样的,在组成内存的电路中,都是一些高低电平的组合。因为处理器是自动按顺序取指令并加以执行的,在指令中混杂了非指令的数据会导致处理器不能正常工作。因此,指令和数据要分开放,分别位于内存中的不同区域,存放指令的区域叫代码区,存放数据的区域叫数据区。

古老的Intel 8086 处理器

  8086 处理器内部有 8 个 16 位的通用寄存器,分别被命名为 AX、BX、CX、DX、SI、DI、BP、SP。这 8 个寄存器中的前 4 个,即 AX、BX、CX 和 DX,又各自可以拆分成两个 8 位的寄存器来使用,总共可以提供 8 个 8 位的寄存器 AH、AL、BH、BL、CH、CL、DH 和 DL。
在这里插入图片描述

  • 数据段:大量的数据集中在一起,位于内存中的某个地方,形成的一个段。
  • 代码段:完成某个工作的所有指令,必须集中在一起,处于内存的某个位置,形成的一个段。

  为了在硬件一级提供对“段地址:偏移地址”内存访问模式的支持,处理器至少要提供两个段寄存器,分别是代码段(Code Segment,CS)寄存器和数据段(Data Segment,DS)寄存器。
在这里插入图片描述
  在进行数据传送或者算术逻辑运算的时候,使用算术逻辑部件(ALU)。比如,将 AX 的内容和 CX 的内容相加,结果仍在 AX 中,那么,在相加的结果返回到 AX 之前,需要通过一个叫数据暂存器的寄存器中转。
  处理器能够自动运行,这是控制器的功劳。为了加快指令执行速度,8086 内部有一个 6字节的指令预取队列,在处理器忙着执行那些不需要访问内存的指令时,指令预取部件可以趁机访问内存预取指令。这时,多达 6 个字节的指令流可以排队等待解码和执行。
  8086 内部有 4 个段寄存器。其中,CS 是代码段寄存器,DS 是数据段寄存器,ES 是附加段(ExtraSegment)寄存器。附加段的意思是,它是额外赠送的礼物,当需要在程序中同时使用两个数据段时,DS 指向一个,ES 指向另一个。可以在指令中指定使用 DS 和 ES 中的哪一个,如果没有指定,则默认是使用 DS。SS 是栈段寄存器。
  IP 是指令指针(Instruction Pointer)寄存器,它只和 CS 一起使用,而且只有处理器才能直接改变它的内容。当一段代码开始执行时,CS 指向代码段的起始地址,IP 则指向段内偏移。这样,由 CS 和 IP 共同形成逻辑地址,并由总线接口部件变换成物理地址来取得指令。然后,处理器会自动根据当前指令的长度来改变 IP 的值,使它指向下一条指令。
  当然,如果在指令的执行过程中需要访问内存单元,那么,处理器将用 DS 的值和指令中提供的偏移地址相加,来形成访问内存所需的物理地址。
  8086 的段寄存器和 IP 寄存器都是 16 位的,如果按照原先的方式,把段寄存器的内容和偏移地址直接相加来形成物理地址的话,也只能得到 16 位的物理地址。麻烦的是,8086 却提供了 20 根地址线。换句话说,它提供的是 20 位的物理地址。
  而这20位物理地址是先将段寄存器的内容左移 4 位(相当于乘以十六进制的 10,或者十进制的 16),形成 20 位的段地址,然后再同 16 位的偏移地址相加,得到 20 位的物理地址。

猜你喜欢

转载自www.cnblogs.com/chengmf/p/12512484.html
今日推荐