什么是汇编?

什么是汇编?

格伦·贝克和贝蒂·斯奈德在弹道研究实验室操作 ENIAC。
格伦·贝克和贝蒂·斯奈德在弹道研究实验室操作 ENIAC。

ENIAC 是第一台通用电子计算机。它建于宾夕法尼亚大学,于 1945 年完成。斯奈德是手动为它编程的六位女性之一。

在 ENIAC 这样的机器出现之前,计算机这个词指的是用手计算的人,而为 ENIAC 编程的六位女性正是为此被雇用的。要给机器编程,她们要重新接线:每当问题改变时,她们就插拔电缆并设置开关。这种重新接线就是汇编语言存在的历史原因。几年之内,欧洲和美国的工程师开始用代表指令的简短书面代码取代电线和开关设置,这样人们无需触碰连接器就能阅读和修改程序。

首先,CPU(中央处理器)是计算机中心的芯片,它只做一件事:执行一长串称为指令的小命令,一条接一条,每秒数十亿条。每条指令本身都很简单,比如把两个数相加、移动一个值,或跳转到另一个位置。

汇编是 CPU 所执行的指令中人类可以阅读的形式。每一行(几乎)就是一条机器指令。你不会得到循环、对象或字符串。你在寄存器(处理器内部的小型存储槽)和内存之间移动数字。

莫里斯·威尔克斯在剑桥大学检查 EDSAC 的一部分。
莫里斯·威尔克斯在剑桥大学检查 EDSAC 的一部分。

EDSAC 运行了大卫·惠勒的 Initial Orders,这是最早把书面指令翻译成机器码的程序之一。

每个处理器都需要一个程序来读取书面指令并生成硬件执行的原始比特:汇编器。本页的汇编器针对一种指令集。

这个模拟器使用 RISC-V,一种用于真实芯片并在大学中教授的现代指令集。你在这里学到的东西可直接应用于硬件。

李允燮在 2013 年手持早期的 RISC-V 原型芯片。
李允燮在 2013 年手持早期的 RISC-V 原型芯片。

RISC-V 是一种开放的指令集架构。任何人都可以在硬件中实现其已发布的规范,无需付费或获得许可。

任何指令集设计都必须决定单条指令执行多少工作。CISC(复杂指令集计算机)芯片,包括大多数台式机和笔记本电脑中的 x86 架构,把大量工作放进每条指令。一条指令可能从内存读取一个值、对它进行算术运算,再把结果存回去,全部在一步内完成。RISC-V 遵循 Patterson & Ditzel, 1980 所主张的设计:每条指令执行一个简单操作,任何复杂行为都通过组合许多这样的指令来产生。

RISC 代表精简指令集计算机。硬件被构建为高速运行一小组简单指令。复杂行为通过组合这些简单、快速的步骤来产生。

凯瑟琳·布思为 ARC 编写的汇编器(Booth, 1947)和大卫·惠勒为 EDSAC 编写的 Initial Orders(Wilkes, Wheeler & Gill, 1951)都属于最早可用的汇编器之列,历史学家仍在争论哪一个更早。这个模拟器所运行的指令集 RISC-V 定义了一份小巧、开放的指令列表,任何人都可以实现(Asanović & Patterson, 2014)。从这一点开始的每一课都直接教授该指令集。