本系列为阅读《计算机系统要素》之后的总结,如有不准确或者错误的地方,欢迎指正。
个人建议,阅读完《Code–隐匿在计算机软硬件背后的语言》后,再阅读此书,效果更佳。
目录
1、冯·洛依曼结构
本文的Hack计算机按照经典的冯洛依曼结构搭建:一个中央处理单元,中央处理单元与内存进行交互,负责从输入设备接收数据,向输出设备发送数据。
1.1 内存
- 数据内存
数据抽象被翻译成机器语言后,变成一连串的二进制数,存储在计算机的数据内存中。通过指定的地址,在数据内存中找到相对应的内存单元,从而对该内存单元进行读操作或写操作。
- 指令内存
高级指令被翻译成机器语言时,变成一系列的二进制字,这些字表示机器的指令,被存储在计算机的指令内存中。
1.2 中央处理器
- 算术逻辑单元(Arithmetic-Logic Unit)
AlU负责执行计算机中所有底层的算术操作和逻辑操作
- 寄存器
进行数据的快速存取
数据寄存器:短期记忆服务
寻址寄存器
程序计数寄存器:保存下一条要执行的指令的地址
- 控制单元
对指令进行解码,解码后,向不同的硬件设备发送信号,指使它们执行指令;并且还负责决定下一步需要取出和执行的命令
2、Hack硬件平台
HACK平台是一台16位的计算机(16位指的是什么),包含一个CPU、两个独立的内存模块(指令内存和数据内存)、两个内存映像I/O设备
2.1 中央处理器 (Central Processing Unit,CPU)
Hack平台的CPU用来设计执行16位指令,HACK的CPU由四个部分组成:ALU、数据寄存器(D,仅存储数值)、地址寄存器(A,数值、ROM地址、RAM地址)、程序计数器。与两个相互独立的内存模块相连,一个是指令内存,一个是数据内存。
2.1.1 指令解码
解析出16位指令的内容,分解为 “i xx a cccccc ddd jjj”,i表示指令类型,0代表A指令,1代表C指令,如果是C指令,那么进行计算。如果是A指令,就是地址指令。
2.1.2 指令执行
如果当前指令是地址指令(第一位是0),那么将A寄存器中的数值设置为地址指令中的15位常数;如果是计算指令,则指令中的各个数据是控制位,控制ALU和寄存器执行命令。
2.1.3
在执行当前指令的同时,CPU确定下一条地址,通过程序计数器的输出端发送该地址。
2.3 指令内存
HACK的指令内存是可以直接进行访问的只读内存设备,由32K可寻址的16位寄存器组成。