在学习汇编语言时,第一章学习到了地址总线的内容,随即而来就是关于计算CPU寻址能力的问题。作为刚入门的小萌新,对书上的两句话表示疑惑。
首先,补充一下关于存储单元的知识,一个存储单元可以存储一个字节(Byte),8个比特即8个二进制数(bit)组成一个Byte,即一个存储单元可存储8个二进制位。
①“一根导线可以传送的稳定状态只有两种,高电平和低电平。用二进制表示就是1或0,10根导线可以传送10位二进制数据。”
②“一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。”
那这样这两句话岂不是自相矛盾?二者表达的相差了2的8次方啊。
不矛盾,byte是内存编址的最小单位,而不是bit。
比如说内存地址0,表示的是0~7这7个bit构成的存储,内存地址1,表示的是8~15,以此类推。
对于一个字节,是整体存储、读取、修改的,也就是说你要修改第一个bit的数据,从0修改为1,只能整体上对地址0的8位全部读取,然后将第一位设置为1,再整体写入。
1根地址总线能够标识的最大地址信息是 “ 两个 ” ,也就是 2 的 1 次方,即 0 和 1 这两种,这根线只能表示 1 或者 0 ,最多也只能表示这两个,【 地址总线是单向传输,只能由从CPU传向外部存储器或者 I/O 端口,所以地址总线是 “ 单向三态 ” 的 —— 所谓的 “ 三态 ” 即三态门单元电路,在三态门单元中除了可以输出高电平和低电平外,还有第三个状态:高阻 ;三态门单元广泛应用于数字电路中。在计算机中,数据总线和地址总线 可能有多个设备共用,相当于将多个门电路的输出并联在一起。如果不用三态门电路,在多个输出设备中部分输出为高电平,部分输出为低电平时,一方面会造成逻辑电平混乱,另一方面会由于短路造成器件电流很大损坏器件,所以采用三态门电路是必要的,它能保证总线上的任何时候只有一个输出设备的三态门单元处于开启状态,其它为关闭状态,输出为高阻态,可以避免以上问题】
1根数据总线能够传输的最多信息是 “ 1位 ” ,要么是 0 ,要么是 1 ,如果有 8 根数据总线一次只能传输 8 位数据,即 1 Byte的数据量,也就是1个字节;【数据总线是双向传输,即 CPU 存储器或 I/O 接口等部件之间的数据互传。数据总线的位数是极端及的一个重要指标,通常与 CPU 的字长一致,比如 8086 处理器的字长是 16位,其数据总线宽度也是 16 位 。数据的含义是广义上的,即数据可以是真正意义上的数据,也可以是指令代码或者状态信息,甚至是一个控制信息,所以数据总线上传送的并不一定仅仅是真正意义上的数据。常见的数据总线为ISA、EISA、VESA、PCI等。另外,数据总线属于 “ 双向三态电路 ” 】
控制总线传输的是控制信号和时钟信号等,其中 CPU 向存储器和 I/O 设备接口电路传输的控制信号,如:读/写信号、片选信号、中断响应信号等;也包含其它部件反馈给CPU的,如:中断申请信号、复位信号、总线请求信号、设备就绪信号等。控制信息包括CPU对内存和输入输出接口的读写信号,输入输出接口对CPU提出的中断请求或DMA请求信号,CPU对这些输入输出接口回答与响应信号,输入输出接口的各种工作状态信号以及其他各种功能控制信号。控制总线来往于CPU、内存和输入输出设备之间。因此,控制总线的传送方向由具体控制信号而定,一般是双向的,控制总线的位数要根据系统的实际控制需要而定。实际上控制总线的具体情况主要取决于CPU。
以上的三个总线都是建立在一个时钟周期前提下的,即晶振发出一个信号脉冲时间内 1 根数据总线和 1 根地址总线传出 “ 1 位 ” 信息,并识别或标识出 “ 两个 ”内存地址;