Skip to content

Latest commit

 

History

History
112 lines (54 loc) · 3.7 KB

readme.md

File metadata and controls

112 lines (54 loc) · 3.7 KB

四、机器语言

总结

A machine language is an agreed-upon formalism designed to code machine instructions.

机器语言可视为一种通过CPU和寄存器操作内存的规则

本章内容开始超出数电范畴,进入底层编程领域。

本章介绍机器语言,为下一章搭建通用计算机提供基础。

本章十分精彩,有如最后一块拼图。

Wiki

pic

4.1.1 机器结构

内存(Memory)存放数据和程序。

处理器(CPU)负责数学和逻辑运算、内存操作和控制操作

寄存器(Cache)用于临时存放处理器的操作数和结果,提高速度。

4.1.2 语言

对指令、内存和寄存器进行编码,它们组合起来可构成汇编语句。

语句通常包括指令、结果存储的位置、操作数(可直接给出值或是给出地址值,取决于指令)。

指令包括计算、内存操作和跳转。

E.g. 1010001100011001 → ADD R3, R1, R9 → 取R1, R9相加并存至R3。

4.2 HACK机器语言

硬件结构

HACK为16位机器。由内存、CPU、键盘、屏幕组成。

内存由各32K的程序内存和数据内存(M)组成,对应15位的地址长度。

CPU对程序内存是只读的,意味着其可以用ROM实现,如游戏卡带一样。

CPU内含两个16位寄存器,称为D和A,接至ALU的a和b端。D专用于存储数据,A用于存储数据和地址。

指令(Instruction Set Architecture)

A(Addr)指令用于写入A寄存器,A寄存器同时接至CPU和两块内存。

最高位置0表示A指令(使能A寄存器写入)。

C-instruction

C(Comp)指令语句可包括计算(comp)、目的地(dest)、跳转(jump)三部分。

计算部分共7位,第一位(a)决定A作为地址还是数据,后6位控制ALU。

数据的位置可以是D, A, M[A],目的地部分共三位,分别控制是否将结果写入对应的位置。

跳转部分共三位,分别实现当计算结果小于、等于、大于0时,跳转至A地址,实现方式是更改程序计数器的值,使其变为A。

E.g.

E.g. fig4.4 fig4.5

// 内为注释内容

@ 符号表示写入A寄存器(A指令)。

M 表示A指向的数据内存地址中存储的值。

(xxx) 表示定义程序内存中下一行语句所在的地址值为xxx(汇编器功能,并不生成机器码)。

程序中,用户自定义的变量,会由汇编器自动从16号地址开始分配。

外设

屏幕为512×256分辨率,映射至内存中的16384(0x4000)至24575(0x5FFF)地址。第r行第c列像素由RAM[16384 + 32r + c/16]控制。

键盘输入字符的ASCII值存放于24576(0x6000)地址。HACK还提供了额外按键支持。

fig 4.6

屏幕和键盘的扫描刷新由异步的外部硬件提供,系统中没有中断。

代码

书的编排十分精巧,本章介绍了硬件设计,但是选择先让你在这一章用汇编语言写点软件,再让你在下一章设计使用这套指令集的硬件。写过汇编后,自然地会对硬件需要具备的功能有直观清晰的认识。

自上而下 :先在高层次设计,再向低层次翻译。在汇编开发中较为适用。

CPU模拟器教程

乘法程序可以优化,先取R0和R1中的较大者作为加数,减少循环次数。

循环中可以使计数变量递减,与0作比较,减少计算。

注意循环中语句的顺序,注意对值的存储和调用。

测试时可选择顶上Animate一栏中的No Animation项,加快仿真速度。