💻 第三章 体验一次手工汇编
📄 一句话概括

机器语言是 0/1 串,汇编语言是它的助记符版本——操作码加操作数,一条指令一张表,查着写。

📝 本节和前面几节的关系

上一节立起程序员视角,这一节看清这个视角里【写出来的东西】长什么样:机器语言与汇编语言。

一、机器语言的真相

CPU 只认一种语言:机器语言——一串 0 和 1。Z80 的【把 128 装进 A】就是 00111110 10000000。 头 8 位 00111110(十六进制 3E)是操作码:指令的编号;后 8 位 10000000(80)是操作数:要用的数。 一条指令的格式就这么简单:操作码(干什么)+操作数(用什么)。位数可多可少,由指令本身规定。

二、汇编语言的诞生

全用 0/1 写程序,人眼分不清、易抄错。于是给每条机器码起了一个助记符名:3E 80 写成 LD A, 128,一目了然。 这套助记符体系叫汇编语言;把它翻译回机器码的工具叫汇编器。 关系要理清:机器语言是唯一【机器直接执行】的语言;汇编语言是【给人写】的对应文本,两者一条一条严丝合缝。

三、为什么先学汇编

汇编离机器只有一层,学它能看清计算机到底在做什么——这正是本课反复强调的【看清本质】。 【⚠️ 2026 现状】现实开发几乎不用汇编(只在启动代码、驱动、极致优化处露面),但它作为【教学标本】的价值一百年不变。

四、动手 Demo:指令对照表:机器码与助记符

把本章要用的三条指令做成对照表,看清操作码与操作数的位置关系。

# 三条指令的两种写法
table = [
    ("LD A, 128", "3E", "80", "装数进累加器"),
    ("OUT (2), A", "D3", "02", "把 A 送端口 2"),
    ("HALT", "76", "", "停机"),
]
for asm, op, operand, note in table:
    print(asm.ljust(11), op, operand.ljust(3), note)

实跑输出:

--------------------------------------------------------------------
同一条指令,两种写法
--------------------------------------------------------------------

机器语言是 CPU 唯一认识的语言——一串 0 和 1。
汇编语言是它的助记符版本,人写汇编、机器执行机器码。对照看:

  意思                汇编(助记符)     机器码(十六进制)     机器码(二进制)
  ----------------------------------------------------------------------------
  把 128 装进 A       LD A, 128        3E 80                00111110 10000000
  把 A 送到端口 2     OUT (2), A       D3 02                11010011 00000010
  停机                HALT             76                   01110110

规律:左侧的 3E、D3、76 是【操作码】——指令的编号;
右侧的 80、02 是【操作数】——指令要用的数。
一条指令 = 操作码(+ 操作数),跟你查字典一样机械。

为什么还要汇编?看这一行机器码就知道:
    00111110 10000000 —— 0 和 1 排列,人眼几乎分不出谁是谁。
    写成 LD A, 128 —— 一眼就懂。汇编只是给机器码起的人话名字。

HALT 没有操作数——不是所有指令都要带数,够用就好。 背下 3E、D3、76 三个操作码,3.5 的手工汇编就是查表填空。

30 秒实验

  1. 把 3E 展开成二进制——00111110,对照教材里的操作码表看看哪几位在【报名字】。
  2. 找一份 Z80 指令表(网上一搜就有),随机挑三条念出它的助记符。

常见误区

  1. 以为汇编语言是【另一种机器语言】——它只是机器码的文本别名,执行时仍翻回 0/1。
  2. 以为操作数写前面——Z80 的惯例是操作码在前、操作数在后(源与目的的顺序另有规矩)。
自测三问(点开对答案) 1. 机器语言与汇编语言的关系是什么? —— 机器语言是机器唯一直接执行的形式(0/1);汇编语言是它的助记符文本版,由汇编器翻译。 2. 一条指令的两部分是什么? —— 操作码(指令编号,干什么)+操作数(要用的数,用什么)。 3. 3E 80 对应的汇编写法是什么? —— LD A, 128——把 128 装进累加器 A。

相关笔记