| Candidates should be able to: | Notes and guidance |
|---|---|
| Show understanding of the basic Von Neumann model for a computer system and the stored program concept | |
| Show understanding of the purpose and role of registers, including the difference between general purpose and special purpose registers | Special purpose registers including: • Program Counter (PC) • Memory Data Register (MDR) • Memory Address Register (MAR) • The Accumulator (ACC) • Index Register (IX) • Current Instruction Register (CIR) • Status Register |
| Show understanding of the purpose and roles of the Arithmetic and Logic Unit (ALU), Control Unit (CU) and system clock, Immediate Access Store (IAS) | |
| Show understanding of how data are transferred between various components of the computer system using the address bus, data bus and control bus | |
| Show understanding of how factors contribute to the performance of the computer system | Including: • processor type and number of cores • the bus width • clock speed • cache memory |
| Understand how different ports provide connection to peripheral devices | Including connection to: • Universal Serial Bus (USB) • High Definition Multimedia Interface (HDMI) • Video Graphics Array (VGA) |
| Describe the stages of the Fetch-Execute (F-E) cycle | Describe and use 'register transfer' notation to describe the F-E cycle |
| Show understanding of the purpose of interrupts | Including: • possible causes of interrupts • applications of interrupts • use of an Interrupt Service Routine (ISR) • when interrupts are detected during the fetch-execute cycle • how interrupts are handled |
处理器基础
A-Level 计算机科学 · 第 4 主题
4.1
中央处理器(CPU)体系结构
大纲
来源:剑桥国际大纲
冯·诺依曼体系结构(Von Neumann architecture)是几乎每一台通用计算机的基础:
- 一个单一存储器——立即存取存储器(Immediate Access Store,IAS)——同时容纳程序指令和数据(存储程序(stored program)概念)。
- 一个处理器(processor,CPU)从存储器取指令并一次运行一条。
- 除非一个分支改变流程,指令按顺序运行。
存储程序的想法就是使一台计算机灵活的东西:改变程序,你就改变它所做的事,不用重新布线。
Tap the parts of a Von Neumann computer
Explore each block. The CPU (control unit, ALU, registers) talks to a single main memory over the buses — and that one shared memory for instructions AND data is the Von Neumann idea.
| 英文 | 中文 | 拼音 |
|---|---|---|
| Von Neumann architecture | 冯·诺依曼体系结构 | féng · nuò yī màn tǐ xì jié gòu |
| Immediate Access Store | 立即存取存储器 | lì jí cún qǔ cún chǔ qì |
| stored program | 存储程序 | cún chǔ chéng xù |
| processor | 处理器 | chǔ lǐ qì |
4.1
CPU 的主要部件
所有这些部件都位于一个小芯片内。本节后面的图显示它们如何连接;下面的照片显示实物。


算术逻辑单元(ALU)
ALU(算术逻辑单元)做算术(加、减……)和逻辑(AND、OR、比较)。它从寄存器(registers)取操作数,并把结果放回一个寄存器。
控制单元(CU)
控制单元(control unit)译码每条指令,并发送控制信号来执行它——打开数据通路、告诉 ALU 做什么,以及控制存储器读和写。
系统时钟
时钟发送一串稳定的脉冲,使 CPU 保持同步。每条指令占固定数目的周期,时钟频率(clock speed,例如 3.8 GHz)是性能的一个因素。
"解释 CU 和系统时钟如何协同工作":时钟以固定频率发出脉冲;控制单元用每个脉冲把取指-执行周期推进一步,并与脉冲同步地发出它的控制信号,于是处理器的每个部分一起改变状态。更快的时钟意味着每秒更多的步骤,直到电路来不及在脉冲之间稳定下来为止。
寄存器
寄存器是 CPU 内微小、非常快的存储。专用寄存器(special purpose registers)各在周期中有一个固定的工作:
- 程序计数器(Program Counter,PC)——下一条指令的地址。
- 内存地址寄存器(Memory Address Register,MAR)——正在读或写的地址。
- 内存数据寄存器(Memory Data Register,MDR)——正在往存储器去或从存储器来的数据。
- 当前指令寄存器(Current Instruction Register,CIR)——正在译码的指令。
- 累加器(Accumulator,ACC)——ALU 正在处理的值。
- 状态寄存器(Status Register)——容纳分支所用的标志(flags,进位、零、负、溢出)。每个标志是一位,由 ALU 在一次运算后置位或清零:比较相等后置零标志,加法溢出寄存器时置进位标志,结果为负时置负标志。条件跳转读取这些标志来决定是否分支,而溢出标志可以引发一个中断。
- 变址寄存器(Index Register)——变址寻址中加到地址上的一个偏移量;把它递增就能一次一个元素地遍历数组。
"补全表格,描述每个寄存器的作用"这道题要求用这些说法为每个寄存器写一句准确的话:PC 存放下一条要取的指令的地址;MAR 存放正在读或写的存储单元的地址;MDR 存放刚从该单元读出、或即将写入该单元的数据或指令;CIR 存放当前正在译码和执行的指令;ACC 存放最近一次算术或逻辑运算的结果。
通用寄存器(general-purpose registers)由程序员用于计算过程中的临时值。寄存器与存储器之间的数据移动用寄存器传送(register transfer)记法写——例如 MAR ← [PC]("把 PC 的内容复制到 MAR")。

| 英文 | 中文 | 拼音 |
|---|---|---|
| ALU | 算术逻辑单元 | suàn shù luó jí dān yuán |
| registers | 寄存器 | jì cún qì |
| control unit | 控制单元 | kòng zhì dān yuán |
| clock speed | 时钟频率 | shí zhōng pín lǜ |
| special purpose registers | 专用寄存器 | zhuān yòng jì cún qì |
| Program Counter | 程序计数器 | chéng xù jì shù qì |
| Memory Address Register | 内存地址寄存器 | nèi cún dì zhǐ jì cún qì |
| Memory Data Register | 内存数据寄存器 | nèi cún shù jù jì cún qì |
| Current Instruction Register | 当前指令寄存器 | dāng qián zhǐ lìng jì cún qì |
| Accumulator | 累加器 | lěi jiā qì |
| Status Register | 状态寄存器 | zhuàng tài jì cún qì |
| flags | 标志 | biāo zhì |
| Index Register | 变址寄存器 | biàn zhǐ jì cún qì |
| General-purpose registers | 通用寄存器 | tōng yòng jì cún qì |
| register transfer | 寄存器传送 | jì cún qì chuán sòng |
4.1
总线
三条内部总线(buses,一组组并行导线)连接各部件:
- 地址总线(address bus)——传送存储器地址。单向(CPU → 存储器)。
- 数据总线(data bus)——传送数据。双向。
- 控制总线(control bus)——传送控制信号(读、写、中断)。双向。
一条 $n$ 位地址总线能到达 $2^{n}$ 个存储单元。数据总线宽度决定每次访问移动多少位(常常是字长)。

| 英文 | 中文 | 拼音 |
|---|---|---|
| buses | 总线 | zǒng xiàn |
| address bus | 地址总线 | dì zhǐ zǒng xiàn |
| data bus | 数据总线 | shù jù zǒng xiàn |
| control bus | 控制总线 | kòng zhì zǒng xiàn |
| number of cores | 核心 | hé xīn |
4.1
影响性能的因素
- 时钟频率——每秒更多的周期。
- 核心数(cores)——一个多核 CPU 一次运行几个线程。
- 字长(word size)——一个 64 位 CPU 每周期处理 64 位块,并能寻址比一个 32 位的多得多的存储器。
- RAM 数量(随机存取存储器)——更多的 RAM 容纳更多的工作集;太少迫使操作系统页(page)到磁盘。
- 高速缓存(cache memory)大小——更多的高速缓存减少平均存储器访问时间。
- 辅助存储器(secondary storage)类型——一个 SSD 加载程序比一个 HDD 快得多。
- 总线宽度和速度——更宽/更快的总线更快地移动数据。
使规格与工作负载匹配:一个四核在并行工作上胜过一个双核,但更高的每核速度在单线程工作上胜出。
每个因素都是一道带理由的两分题:
- 更多核心:每个核心能同时取出并执行自己的指令,所以多个程序,或一个程序的多个线程,可以并行运行。但程序必须被编写成能使用多个核心,所以核心数加倍不会使速度加倍。
- 更高的时钟频率:每秒更多的取指-执行周期,所以每秒执行更多指令;限制在于产生的热量。
- 更宽的总线:更宽的数据总线在每次传送中移动更多的位,所以同样的数据需要更少的传送次数;更宽的地址总线能寻址更多的存储单元。
- 高速缓存:处理器内部或紧邻处理器的一小块快速存储器,保存最近或最常使用的指令和数据。从高速缓存读取比从 RAM 读取快得多,所以处理器等待的时间更少。
"解释为什么新计算机性能更好"要逐行比较两台机器的规格:更高的时钟频率每秒执行更多指令,更多核心同时运行更多任务,更多高速缓存意味着更少的慢速 RAM 访问,更多 RAM 意味着更少的磁盘传送。
| 英文 | 中文 | 拼音 |
|---|---|---|
| word size | 字长 | zì zhǎng |
| amount of RAM | 随机存取存储器 | suí jī cún qǔ cún chǔ qì |
| page | 页 | yè |
| cache memory | 高速缓存 | gāo sù huǎn cún |
| secondary storage | 辅助存储器 | fǔ zhù cún chǔ qì |
| cores | 核心 | hé xīn |
| RAM | 随机存取存储器 | suí jī cún qǔ cún chǔ qì |
4.1
端口
一个端口(port)是一个用于连接外围设备(peripheral)的物理插座:
- USB(通用串行总线)——通用(键盘、驱动器、手机)。
- HDMI(高清多媒体接口)——向一个屏幕的数字视频和音频。
- VGA(视频图形阵列)——向一个显示器的较老的模拟视频输出。
- Ethernet(RJ-45)——有线 LAN。音频插孔——耳机/麦克风。
不同的端口用不同的信号,所以一根 HDMI 电缆不会装进一个 USB 插座。USB-C 不寻常,它携带视频、数据和电力。
"解释计算机如何通过 HDMI 连接显示器":HDMI 端口把视频和音频作为一个数字信号沿一根电缆发送,所以不需要转换成模拟信号,画面不会劣化;电缆传输高清分辨率,显示器自己的端口对信号解码。USB 设备是即插即用的:接入时计算机检测到它、识别它、加载或安装它需要的驱动程序,并能为它供电,全程不需要重启。
| 英文 | 中文 | 拼音 |
|---|---|---|
| port | 端口 | duān kǒu |
| peripheral | 外围设备 | wài wéi shè bèi |
4.1
取指-执行周期
CPU 重复取指-执行周期(fetch-execute cycle),每条机器指令运行一次。
取指
- PC 的地址被复制到 MAR。
- PC 被递增以指向下一条指令。
- 一个读信号经控制总线传送。
- 存储器把指令放到数据总线上。
- 它被复制到 MDR,然后到 CIR。
考试要求用寄存器传送记法(register transfer notation)写出这些步骤,其中 [X] 表示寄存器 X 的内容,[[MAR]] 表示地址存放在 MAR 中的那个存储单元的内容:
MAR ← [PC] 下一条指令的地址送到 MAR
PC ← [PC] + 1 PC 现在指向再下一条指令
MDR ← [[MAR]] 该地址处的指令被读入 MDR
CIR ← [MDR] 指令被复制到 CIR 以便译码
顺序很重要:PC 的地址一被复制出去就立即递增,这样后面执行的跳转仍能覆盖它。执行阶段用同样的记法描述每条指令;例如对 LDD 200,就是 MAR ← 200,MDR ← [[MAR]],ACC ← [MDR]。

译码
CU 译码 CIR 中的指令——什么运算,以及哪些操作数或地址。
执行
CU 执行它:算术/逻辑去 ALU(结果到 ACC);一个加载/存储在存储器和一个寄存器之间移动数据;一个分支改变 PC。然后周期重复。

The fetch-execute cycle
Tap round the loop the CPU repeats billions of times a second. Watch how fetch uses the PC/MAR/MDR/CIR registers, then decode and execute act on what was fetched.
The fetch–execute cycle
Step through how the CPU runs one instruction — fetch it from memory, decode it, then execute it, over and over.
| 英文 | 中文 | 拼音 |
|---|---|---|
| fetch-execute cycle | 取指-执行周期 | qǔ zhǐ - zhí xíng zhōu qī |
| register transfer notation | 寄存器传送记法 | jì cún qì chuán sòng jì fǎ |
4.1
中断
一个中断(interrupt)是一个暂停正常周期的信号,以便 CPU 能处理一个紧急事件(一次按键、一个数据包到达、一个硬件故障、除以零、操作系统计时器)。
处理一个:
- 完成当前指令。
- 保存状态(PC 和寄存器)。
- 把中断服务程序(interrupt service routine,ISR)的地址加载到 PC 并运行它。
- ISR 处理事件。
- 恢复保存的状态并继续。
中断让系统及时响应,而 CPU 不用不断检查设备,并且这是操作系统多任务的方式。
"解释来自输入设备的中断如何在取指-执行周期中被检测和处理"是一道四分题,要点如下:设备发送一个中断信号,把中断寄存器(interrupt register)中的中断标志置位;处理器在每个取指-执行周期结束时、当前指令执行完毕之后检查该寄存器;如果有标志被置位且该中断的优先级高于当前任务,PC 和其他寄存器的内容被保存到栈(stack)上;中断服务程序的地址被加载到 PC,该程序运行;它结束后,保存的值从栈中恢复,被中断的程序从停下的地方继续。
值得说出名称的原因:来自设备的硬件中断(按键、打印机缓冲区空了、网络数据包到达),来自故障的软件中断(除以零、非法指令、算术溢出),操作系统标记时间片结束的定时器中断,以及电源故障警告。

| 英文 | 中文 | 拼音 |
|---|---|---|
| interrupt | 中断 | zhōng duàn |
| interrupt service routine | 中断服务程序 | zhōng duàn fú wù chéng xù |
| interrupt register | 中断寄存器 | zhōng duàn jì cún qì |
| stack | 栈 | zhàn |
4.2
汇编语言
大纲
| Candidates should be able to: | Notes and guidance |
|---|---|
| Show understanding of the relationship between assembly language and machine code | |
| Describe the different stages of the assembly process for a two-pass assembler | Apply the two-pass assembler process to a given simple assembly language program |
| Trace a given simple assembly language program | |
| Show understanding that a set of instructions are grouped | Including the following groups: • Data movement • Input and output of data • Arithmetic operations • Unconditional and conditional instructions • Compare instructions |
| Show understanding of and be able to use different modes of addressing | Including immediate, direct, indirect, indexed, relative |
来源:剑桥国际大纲
CPU 实际运行机器码(machine code)——位模式,专属于一个体系结构。汇编语言(assembly language)是一种可读的形式,每条机器指令一条指令,用像 LDD、ADD、JMP 这样的助记符(mnemonics)书写。一个汇编器(assembler)把它翻译成机器码。

两遍汇编器
一个两遍汇编器读源两次:
- 第一遍构建一个符号表(symbol table):每当一个标签(label,如
LOOP:)出现时,记录它的地址;还不生成代码。 - 第二遍生成代码:翻译每条指令,当一条引用一个标签(如
JMP LOOP)时,在符号表中查找它的地址。
两遍处理前向引用(forward references,一个跳到后面定义的标签的跳转)。
例题。 对下面这个程序应用两遍处理过程,它的第一条指令存放在地址 100。
LDD COUNT
LOOP: DEC ACC
CMP #0
JPN LOOP
END
COUNT: 5
第一遍逐行读取,数出每行将占用的地址,并把每个标签记入符号表:LOOP = 101(DEC 那一行)、COUNT = 105(数据行)。不产生任何代码。第二遍再次读取程序,把每一行翻译成机器码,把每个助记符换成它的操作码(opcode),把每个符号地址换成符号表中的数字:LDD COUNT 变成 LDD 的操作码加操作数(operand)105,JPN LOOP 变成 JPN 的操作码加操作数 101。往回跳到 LOOP 用一遍就能解决,但向前跳到一个尚未见到的标签就不行,这正是汇编器要做两遍的原因。
示例指令集
剑桥用一个小的通用集,印在试卷的参考表中,只有一个通用寄存器即累加器(ACC),以及一个变址寄存器(IX)。写成 #n 的操作数是十进制数,Bn 是二进制数,&n 是十六进制数;<address> 是一个单元编号或一个标签。
| 组 | 指令 | 作用 |
|---|---|---|
| 数据移动 | LDM #n |
把数 n 加载到 ACC(立即) |
LDD <address> |
把该地址的内容加载到 ACC(直接) | |
LDI <address> |
该地址存放另一个地址;把那个地址的内容加载到 ACC(间接) | |
LDX <address> |
把 IX 加到地址上,把结果处的内容加载到 ACC(变址) | |
LDR #n |
把数 n 加载到 IX | |
MOV <register> |
把 ACC 复制到指定的寄存器(IX) | |
STO <address> |
把 ACC 的内容存到该地址 | |
| 输入和输出 | IN |
读取一次按键,把它的 ASCII 码放入 ACC |
OUT |
输出 ASCII 码在 ACC 中的那个字符 | |
| 算术 | ADD <address> / ADD #n |
把该地址的内容或该数加到 ACC |
SUB <address> / SUB #n |
从 ACC 中减去 | |
INC <register> / DEC <register> |
把 ACC 或 IX 加 1 或减 1 | |
| 比较 | CMP <address> / CMP #n |
把 ACC 与该地址的内容或与 n 比较,并设置标志 |
CMI <address> |
把 ACC 与该地址所存地址处的内容比较(间接) | |
| 跳转 | JMP <address> |
无条件跳到该地址 |
JPE <address> / JPN <address> |
若上次比较相等 / 不相等则跳转 | |
| 位操作 | AND、OR、XOR 带 #n、Bn、&n 或 <address> |
对 ACC 做按位运算 |
LSL #n / LSR #n |
把 ACC 逻辑左移或右移 n 位 | |
END |
结束程序 |
"汇编语言指令是分组的"这道题要求写出各组的名称,并各举一条指令:数据移动、输入和输出、算术、无条件和条件跳转、比较,以及位操作。
How a two-pass assembler works
Step through it. The assembler reads your code twice: pass 1 just finds where every label lives, so pass 2 can fill in the addresses — that is how a jump to a label defined later still works.
| 英文 | 中文 | 拼音 |
|---|---|---|
| machine code | 机器码 | jī qì mǎ |
| Assembly language | 汇编语言 | huì biān yǔ yán |
| mnemonics | 助记符 | zhù jì fú |
| assembler | 汇编器 | huì biān qì |
| symbol table | 符号表 | fú hào biǎo |
| label | 标签 | biāo qiān |
| forward references | 前向引用 | qián xiàng yǐn yòng |
| opcode | 操作码 | cāo zuò mǎ |
| operand | 操作数 | cāo zuò shù |
4.2
寻址方式
寻址方式(addressing mode)说明 CPU 如何找到操作数:
- 立即寻址(immediate addressing)——操作数是指令中的值。
LDM #10加载 10。 - 直接寻址(direct addressing)——指令容纳一个地址;操作数是那里的值。
LDD 200。 - 间接寻址(indirect addressing)——指令容纳一个地址,它容纳另一个地址,那才是数据。
LDI 200。 - 变址寻址(indexed addressing)——有效地址是
address + index register;用于数组。LDX 100且 IR = 5 读地址 105。
(相对寻址(relative addressing)把地址作为从 PC 起的一个偏移量给出——用于跳转。)

例题。 内存中:地址 200 存放 250,地址 250 存放 99,地址 105 存放 7。变址寄存器中是 5。分别执行 LDM #200、LDD 200、LDI 200 和 LDX 100 之后,累加器中各是什么?跟着每种寻址方式要找多远来看。LDM #200 是立即寻址 - 操作数就是指令中写的那个数,所以累加器中是 200。LDD 200 是直接寻址 - 去地址 200 取出其中的内容:250。LDI 200 是间接寻址 - 地址 200 中存的是 250,那是另一个地址,所以继续去地址 250:99。LDX 100 是变址寻址 - 把变址寄存器加到地址上,$100 + 5 = 105$,再读地址 105:7。用"跳几次"来区分它们:立即 0 次,直接 1 次,间接 2 次,变址 1 次(在加上变址值之后)。
| 英文 | 中文 | 拼音 |
|---|---|---|
| addressing mode | 寻址方式 | xún zhǐ fāng shì |
| immediate addressing | 立即寻址 | lì jí xún zhǐ |
| direct addressing | 直接寻址 | zhí jiē xún zhǐ |
| indirect addressing | 间接寻址 | jiàn jiē xún zhǐ |
| indexed addressing | 变址寻址 | biàn zhǐ xún zhǐ |
| Relative addressing | 相对寻址 | xiāng duì xún zhǐ |
4.2
跟踪汇编程序
要跟踪它:做一个表,列有 PC、ACC、变址寄存器、每个变量和任何标志。逐条走过指令,每条之后更新表;当分支改变 PC 时跟随它们;在 END 停止。一个常见模式是用变址寻址在一个数组上循环。
例题。 跟踪这个程序。地址 200 存放 5,地址 201 存放 0。
100 LDD 200
101 CMP #0
102 JPE 108
103 OUT
104 DEC ACC
105 STO 200
106 LDD 201
107 JMP 100
108 END
每执行一条指令写一行,只填发生变化的列:
| 指令 | ACC | 200 | 201 | 输出 |
|---|---|---|---|---|
| 开始 | 5 | 0 | ||
LDD 200 |
5 | |||
CMP #0 |
||||
JPE 108 |
未跳转 | |||
OUT |
码为 5 的字符 | |||
DEC ACC |
4 | |||
STO 200 |
4 | |||
LDD 201 |
0 | |||
JMP 100 |
||||
LDD 200 |
4 |
如此继续,直到 LDD 200 加载到 0,比较置相等标志,JPE 108 跳转,程序结束。考官检查三件事:CMP 不改变任何寄存器,只改变标志;未跳转的跳转指令仍算执行过;OUT 输出的是字符,所以它写在输出列而不是 ACC 列。"说明把 LDD 10 改为 LDM #10 的效果":ACC 将存放数 10,而不是地址 10 的内容。
4.3
位操作
大纲
| Candidates should be able to: | Notes and guidance |
|---|---|
| Show understanding of and perform binary shifts | Logical, arithmetic and cyclic Left shift, right shift |
| Show understanding of how bit manipulation can be used to monitor/control a device | Carry out bit manipulation operations Test and set a bit (using bit masking) |
| Instruction Label | Opcode | Operand | Explanation |
| AND #n / Bn / &n | Bitwise AND operation of the contents of ACC with the operand |
| AND | Bitwise AND operation of the contents of ACC with the contents of |
| XOR #n / Bn / &n | Bitwise XOR operation of the contents of ACC with the operand |
| XOR | Bitwise XOR operation of the contents of ACC with the contents of |
| OR #n / Bn / &n | Bitwise OR operation of the contents of ACC with the operand |
| OR | Bitwise OR operation of the contents of ACC with the contents of |
| LSL #n | Bits in ACC are shifted logically n places to the left. Zeros are introduced on the right hand end |
| LSR #n | Bits in ACC are shifted logically n places to the right. Zeros are introduced on the left hand end |
| Labels an instruction | |
| Gives a symbolic address | |
| All questions will assume there is only one general purpose register available (Accumulator) ACC denotes Accumulator IX denotes Index Register can be an absolute or symbolic address # denotes a denary number, e.g. #123 B denotes a binary number, e.g. B01001010 & denotes a hexadecimal number, e.g. &4A |
来源:剑桥国际大纲
一个逻辑移位(logical shift)把所有位向左或向右移若干位,用 0 填充新位置。
- 左移 1(
LSL #1)——位向左移,一个 0 从右边进入;对一个无符号数这是 × 2。 - 右移 1(
LSR #1)——位向右移,一个 0 从左边进入;对一个无符号数这是整数 ÷ 2。
移 $n$ 位乘以或除以 $2^{n}$。例子:00001011(11)LSL #1 → 00010110(22)。
移出末端的位就丢失了,所以只有当它们是零时,乘法才是正确的。对补码整数 11001010 做 LSL #2 得到 00101000:从左边掉出的两个 1 没有了,符号位变了,结果也不再是原来的四倍。
一个算术右移保留符号位,使一个负的有符号数保持为负。一个循环移位(cyclic shift,旋转)把从一端掉出的位从另一端送回,所以没有位丢失。
"写出对 10011110 算术右移 3 位的结果":把符号位复制到每个空出的位置,得 11110011。同样的移位作用于 01011100 得 00001011。对 10000110 循环左移 1 位得 00001101:最高的那个 1 从右边重新出现。

用于监控/控制的位操作
嵌入式设备常常每个信号用一个寄存器位(bit)(例如位 $n$ = LED $n$)。用一个掩码(mask)——位掩码——你可以:
- 置位 $n$:
R = R OR一个位 $n$ 置位的掩码。 - 清位 $n$:
R = R AND一个位 $n$ 清零而其余置位的掩码。 - 翻转位 $n$:
R = R XOR一个位 $n$ 置位的掩码。 - 测试位 $n$:
R AND掩码,然后检查结果是否非零。

位操作快、用很少的存储器,并让一个字节容纳至多 8 个开/关状态。
在考试的指令集中,这些就是 AND、OR 和 XOR,掩码写成十进制、二进制或十六进制的操作数。设 ACC 存放 10101100:
| 指令 | 掩码 | ACC 中的结果 | 效果 |
|---|---|---|---|
AND B00001111 |
00001111 |
00001100 |
只保留低四位(清除其余各位) |
OR #1 |
00000001 |
10101101 |
置最低有效位,其余不变 |
XOR &FF |
11111111 |
01010011 |
把每一位取反 |
AND B00001000 然后 CMP #0 |
00001000 |
00001000 |
测试位 3:比较结果不相等,所以位 3 是置位的 |
LSL #2 |
10110000 |
左移两位,丢掉最高两位 | |
LSR #3 |
00010101 |
右移三位,左边补零 |
"写出把最低有效位置为 1 而其余各位不变的指令":OR #1,或 OR B00000001。要清除某一位,用一个该位为 0、其余为 1 的掩码做 AND;要测试某一位,用一个只有该位为 1 的掩码做 AND,再把结果与零比较。在监控设备中,寄存器的每一位对应一个传感器,一条 AND 就能检查某个传感器是否开启,一条 OR 就能在不影响其他位的情况下打开某个执行器的控制位。
Shift and mask the bits of a byte
Pick an operator and watch each result bit. A left shift (<<) moves every bit up one place (×2); a right shift (>>) moves them down (÷2); AND with a mask clears the bits you don't want.
| 英文 | 中文 | 拼音 |
|---|---|---|
| logical shift | 逻辑移位 | luó jí yí wèi |
| cyclic shift | 循环移位 | xún huán yí wèi |
| bit | 位 | wèi |
| mask | 掩码 | yǎn mǎ |
4.3
考官认可的定义
定义题按固定的表述给分。把这些记准确,并且只写一个答案。
| 术语 | 定义 |
|---|---|
| 存储程序概念(stored program concept) | 程序指令和数据都存放在主存储器中,指令被逐条取出并执行 |
| 寄存器(register) | 处理器内部一个小而极快、有特定用途的存储位置 |
| 程序计数器(Program Counter) | 存放下一条要取的指令的地址的寄存器 |
| 内存地址寄存器(Memory Address Register) | 存放正在读或写的存储单元的地址的寄存器 |
| 内存数据寄存器(Memory Data Register) | 存放刚从存储器读出、或即将写入存储器的数据或指令的寄存器 |
| 当前指令寄存器(Current Instruction Register) | 存放当前正在译码和执行的指令的寄存器 |
| 累加器(Accumulator) | 存放最近一次算术或逻辑运算结果的通用寄存器 |
| 高速缓存(cache memory) | 靠近处理器的小而快的存储器,存放常用的指令和数据 |
| 中断(interrupt) | 来自设备或程序的信号,使处理器暂停当前任务并运行中断服务程序 |
| 汇编语言(assembly language) | 每条助记符指令对应一条机器码指令的低级语言 |
| 立即寻址(immediate addressing) | 操作数就是指令中写的值 |
| 直接寻址(direct addressing) | 操作数是指令中所写地址的内容 |
| 间接寻址(indirect addressing) | 指令中的地址存放操作数的地址 |
| 变址寻址(indexed addressing) | 操作数的地址是指令中的地址加上变址寄存器的内容 |
| 相对寻址(relative addressing) | 操作数的地址以相对当前指令地址的偏移量给出 |
| 逻辑移位(logical shift) | 每一位移动给定的位数,空出的位置用零填充 |
4.3
考试技巧
- 用寄存器传送术语(PC、MAR、MDR、CIR、ACC)学取指-执行周期,以及什么递增 PC。
- 说出每个寄存器的工作;地址总线是单向的,数据总线是双向的。
- 区分寻址方式(立即、直接、间接、变址)——一个常见的题目。
- 解释时钟频率、核心数、高速缓存大小和字长如何影响性能。
- 对于一个二进制移位,说明它是逻辑的还是算术的;左移乘以 2,右移除以 2。
常见错误
- 说 PC 存放当前指令,或说 MDR 存放地址。PC 存放下一条指令的地址;MDR 存放数据或指令,从不存放地址。
- 在取指中漏掉 PC 的递增,或把它放到执行之后。地址一被复制到 MAR,递增就发生。
- 把
LDD 10读成"加载 10"。LDD 10加载地址 10 的内容;LDM #10加载数 10。 - 给
CMP或OUT在 ACC 列里填值。比较只设置标志;输出写在输出列。 - 说中断被"立即"处理。处理器先完成当前指令,在周期结束时才检查中断。
- 对负的补码数用逻辑右移。只有算术移位才保留符号位。
本主题的互动课程
逐步学习,并即时检测练习。