计算机中的0和1是用电的状态表示的。具体来说,断开为0,接通为1。自然而言,这也对应着二进制。曾经时代的二进制加法机是一个划时代的产物,能够进行两个8位二进制数的实时加法,尽管今天看来很LOW。
寄存器(临时性寄存)由多个触发器组成,寄存器是多输入多输出。触发器是单输入,单输出,锁存命令执行,输入才变成输出。
带寄存器的加法机:
命令:
● 预制:执行锁存操作
● 相加:输入和寄存器中的数据做加法
可以实现连续的加法
能做四则运算的机器
这是对上一节的功能改进,主要体现在电路上的改进,原有基础上增加了减、除的三种电路功能。
机器指令:
带括号的算式在的具有一个寄存器的四则电路中的计算过程:
● 输入拨动为207,按“预制”,锁存207
● 输入拨动为9,按“加”,207和9相加后锁存216
● 此时,需要计算(56-48),但寄存器被占用,把216拿出来记下
● 输入拨动为56,按“预制”,锁存56
● 输入拨动为48,按“减”,56和48相减后锁存8
● 此时,需要计算(216/8),但寄存器被占用,把8拿出来记下
● 输入拨动为216,按“预制”,锁存216
● 输入拨动为8,按“除”,216和8相除后锁存27
以上,是带有一个寄存器的机器,痛点是执行复杂计算时需要额外记录中间结果。
怎么解决痛点? 答案是“增加寄存器”
下面,是带有两个寄存器的机器:
每一种运算的开关,增加一个下方的开关。随着寄存器个数和运算种类的增多,开关也会随之增多,长此以往,这不是长久之计,需要找到一种更好的办法。
将一排二进制数指定为指令,指令是给机器下达的执行命令。什么时候执行?按下“执行”开关。
使用带有两个寄存器的机器计算(207+9)/(56-48)的过程:
● 输入拨动为207,输入指令为00001,锁存207到R
● 输入拨动为9,输入指令为00101,207和9相加后锁存216到R
● 此时,需要计算(56-48),但寄存器被占用,把216拿出来记下
● 输入拨动为56,输入指令为00010,锁存56到Z
● 输入拨动为48,输入指令为01010,56和48相减后锁存8到Z
● 此时,需要计算(216/8),但寄存器被占用,把8拿出来记下
● 输入拨动为216,按“预制”,锁存216
● 输入拨动为8,按“除”,216和8相除后锁存27
● 输入指令为10000,R中的216和Z中的8相除,锁存到R
内存:
具有记忆能力的器件——内存。非常重要的器件。
随着机器功能增加,指令会更加复杂。能否将指令(代表指令的二进制数)存在一个地方,逐步执行呢?内存!
内存由大量的内存单元组成,主流计算机中,一个计算单元是8个比特。
如何区分内存单元呢?答:每个内存单元都有一个编号,第一个内存单元的编号是0,第二个内存单元的编号是1,第三个内存单元的编号是2,依此类推。内存单元的编号也叫地址。如何知道要访问那个内存单元呢?答:内存使用一排电线,称为地址线,来指定内存单元的编号。当想访问某个单元,地址线就输入编号,可以选中某个单元。
地址线的数量决定了可以访问多少个单元,如下(两根地址线只能访问四个单元):
8根地址线呢?
8位二进制数的组合一共有256个,所以可以访问256个(内存)单元。这种二进制组合就是内存地址,在左侧用16进制表示。如果是N根地址线,可以访问多少内存单元呢?答:“2N”。
内存是用来保存或读出数据用的,为此,还有另外的导线:数据线。通过数据线进行数据的读写操作,是双向的。 还需要一根读/写控制线指明是读取内存单元还是写入内存单元。
写入:首先,地址线上有一个地址指向内存单元,然后,在数据线上给出一个要读写的数字,最后,读/写控制线发出写命令,这时,内存会把数据写入到内存单元中。
读出:首先,在地址线上给出一个地址,表示从哪里读,然后,读/写控制线发出写命令,最后,通过数据线进行读出数据。
例子(向110写入8bit数据):
自动计算:
建造一台可以自动取指令并执行的运算机器
运算器可以自动从内存中“取址执行”
指令指针寄存器:保存指令的地址。
运算器开始工作时,运算器将指令指针寄存器的地址输送到地址线上,是要执行的第一条指令的地址。然后内存将该地址的内容放在数据线上,通过数据线进入运算器,运算器根据指令进行移码,执行指令,与此同时,指令指针寄存器自动修改(根据当前执行指令的地址和长度)为下一条地址的值, 因为指令都是按顺序存放的。然后再次重复这个过程。
具体的例子:
第一条指令占用两字节内存单元,改指令包含操作码和操作数,被操作的数字直接包含在指令中,这样的数叫立即数。
最后一条指令是停机,执行后,运算器就停止工作。这时可以从0C处看到结果。
处理器(Processor):
处理器的历史和发展
运算器(功能有限)发展为处理器(Processor)
处理器的组成:
- 总线接口部件
- 发送地址信号
- 发送/接收数据信号
- 控制部件
- 复杂控制和协调整个处理的运行状态(什么时候取指令、输出地址、发送数据、接收数据)
- 指令执行部件
- 负责执行指令
1974,发明自动取指令并且执行指令的芯片,4004处理器。
紧接着,8008(8位处理器)和划时代的8086(16位处理器)。x86系列一直保持对8086的兼容性。
几位的处理器有几位的寄存器和几位的算术逻辑部件
后续Intel又生产了80286和80386,80386是划时代的产品。课程前部分基于8086讲解,后部分基于80386讲解。
后来,推出更多产品,根据领域不同细分更多的类型。i3-3220。引脚用来连接数据线、地址线、控制线。
处理器的工作是自动取指令并执行指令。可以执行哪些指令是设计和制造时候就已经决定了的。
-
指令集:所有可以识别和可以执行的指令的集合
- 十几种,几十种
- 几百上千
-
算数运算指令和逻辑运算指令
-
数据传送指令
- 寄存器之间
- 处理器和内存之间
- 处理器和外围设备之间
-
处理器状态控制指令
○ 用于控制处理器内部的工作模式和运行状态,如电源管理和程序的运行状态
汇编语言的诞生:
汇编语言使用文本符号代替机器指令
mov r, 207 把207移动到寄存器r
add r, 9 寄存器r的值和9相加,放在r中
mov z, 56 56移到寄存器z中
sub z, 48 寄存器z的值和48相减,结果放在z中
div r, z 寄存器r的值和寄存器z的值相除,结果放在r中
mov [12], r 寄存器r的值放在内存地址为12的内存单元
hlt 停机,暂停
处理器只能看懂机器指令