简化的指令计算机 (SIC)

2025年3月17日 | 阅读13分钟

SIC 是一种假设的计算机,它包含一些硬件特性。实际机器大多数都包含这些特性。简化的指令计算机基本上有两个版本,即:

  • SIC 标准模型
  • SIC/XE (超额费用或设备)

1. SIC 机器架构/组件

简化的指令计算机包含许多组件,如下所述:

内存

简化的指令计算机中的内存组织为 8 位字节序列(1 字节 = 8 位)。一个字可以由 3 个连续字节组成(1 字 = 24 位)。这意味着,借助 24 位,简化的指令计算机得以设计。低编号字节用于寻址一个字,寻址从 0 字节开始。计算机内存包含 215 字节。

Simplified Instructional Computer (SIC)

寄存器

简化的指令计算机包含 5 种寄存器。每个寄存器都有一个与之关联的地址,该地址称为**寄存器编号**。每个寄存器只能包含 3 个字节,这意味着其大小为 3 字节。整数的大小取决于寄存器的大小。SIC 中没有堆栈,它主要借助链接寄存器来存储地址。如果我们想编写递归程序,在 SIC 中会非常困难。如果我们编写一个包含多层的函数调用,程序员需要维护返回地址的内存。

助记符数字特殊用途
A (累加器)0此寄存器用于执行算术运算。
X (索引寄存器)1此寄存器用于寻址。
L (链接寄存器)2如果出现子程序的情况,此寄存器将保存指令的返回地址。
PC (程序计数器)8此寄存器用于存储将要执行的下一条指令的地址。
SW (状态字)9此寄存器用于包含各种信息,例如条件码 (CC)。

状态字寄存器有五种类型,如下所述:

模式:此模式位指的是**管理模式**(值为 1)或**用户模式**(值为 0)。模式位占用 1 位。[0]

状态:在此,我们将看到进程是处于**空闲状态**(值为 1)还是**运行状态**(值为 0)。状态位占用 1 位。[1]

ID:此 ID 位指的是**进程 ID** (PID)。ID 位占用 3 位。[2-5]

CC:CC 位指的是**条件码**。这意味着 CC 位将显示设备是否准备就绪。CC 位占用 2 位。[6-7]

掩码:掩码位指的是**中断掩码**。掩码位占用 4 位。[8-11]

X:X 指的是**未使用的位**。X 位占用 4 位。[12-15]

ICode:ICode 指的是**中断码**。其余位由 ICode 占用。[16-23]

数据格式

  • 借助 24 位,可以表示整数。
  • 借助 8 位 ASCII 值,可以表示字符。
  • 没有可用的位来表示浮点数,但 SIC/XE 中存在。
  • 借助 2 的补码,可以表示负数。这意味着 -N ⇔ 2n - N。**例如:**如果 n = 4,则 -1 ⇔ 24 -1 = (1111)2

指令格式

简化的指令计算机中的所有指令总共包含 24 位格式。简化的指令计算机的内存大小为 215 字节。

Simplified Instructional Computer (SIC)

此图像中的 X 用于显示索引地址模式。

寻址模式

SIC 只能支持 2 种模式,如下所述:

  • 索引
  • 直接

如果 **X = 0**,则表示**直接寻址模式**。如果 **X = 1**,则表示**索引寻址模式**,如下所示:

众数指示目标地址计算
直接X = 0TA = 地址
索引X = 1TA = 地址 + (X)

这里的 () 表示寄存器的内容。

指令集

SIC 中的指令集如下所述:

算术指令

SIC 使用内存和寄存器 A 执行运算。借助寄存器,将存储结果。算术指令用 ADD、MUL、SUB、DIV 等表示。**例如:**

算术示例

加载和存储指令

它用于将数据从内存存储或移动到累加器,或将数据从累加器移动到内存。加载和存储指令用 LDX、STA、LDA、STX 等表示。**例如:**

比较指令

它用于比较寄存器 A 中的内容与内存中的数据。它使用 SW 的 CC(条件码)来保存结果。比较指令用 COMP 表示。**例如:**

子程序链接指令

它用于指示与子程序相关的指令。子程序链接指令用 RSUB、JSUB 表示。在此,**RSUB** 将通过跳转到寄存器 L 中的地址来返回,而 **JSUB** 用于跳转并将返回地址放入 L。

条件跳转指令

它首先用于比较内存和累加器的内容。然后,根据条件执行任务。条件跳转指令用 JLT、JGT 和 JEQ 表示。例如

输入和输出

每个设备都包含一个 8 位地址。数据以单个字节的形式传输到寄存器 A 的最右边字节,或从寄存器 A 的最右边字节传输。输入和输出指令有三种类型,如下所述:

测试设备 (TD):它使用状态字和条件码来测试设备是否已准备好发送或接收一个字节数据。如果 CC(条件码)为 <,在这种情况下,设备已准备就绪。如果 CC 为 >,在这种情况下,设备正忙。

读取数据 (RD):借助 RD,可以从设备读取一个字节。该字节将存储在寄存器 A 中。

写入数据 (WD):借助 WD,可以将一个字节写入从寄存器 A 指定的内存设备中。

SIC 的 I/O 示例

2. SIC/XE

SIC/XE 是 SIC(简化的指令计算机)的高级版本,代表**超额费用或超额设备**。SIC(简化的指令计算机)和 SIC/XE 都向上兼容,因为它们密切相关。

SIC/XE 机器架构/组件

SIC/XE 包含许多组件,如下所述:

内存

内存通常包含 8 字节。在 SIC/XE 系统中,最大可用内存为 1 兆字节,即 220 字节。标准 SIC 的内存大小非常小。由于内存大小的变化,简化的指令计算机超额费用 (SIC/XE) 中的寻址模式和指令格式发生了变化。与 SIC 类似,在 SIC/XE 的体系结构中,一个字(24 位)可以由 3 个连续字节组成。在 SIC/XE 中,所有地址都是字节地址。借助字的低编号字节的位置,可以寻址一个字。

寄存器

与 SIC(简化的指令计算机)的寄存器不同,SIC/XE 中有 4 个额外的通用寄存器。这意味着总共有 9 个寄存器(4 个额外寄存器 + SIC 的 5 个寄存器)。SIC/XE 的四个额外寄存器描述如下:

助记符数字特殊用途
B (基址寄存器)3此类寄存器主要用于寻址。
S4此类寄存器是通用寄存器,没有特殊用途。
T5此类寄存器也是通用寄存器,没有特殊用途。
F6这是一个浮点寄存器。

借助 SIC 和 SIC/XE 的所有 9 个寄存器,可以轻松地在自定义汇编语言中执行任务。S 和 T 寄存器只能用于存储。我们不能将这些寄存器用作累加器。**例如:**

数据格式

SIC 标准版本和 SIC/XE 的数据格式几乎相同。数据格式存在一些差异,如下所述:

  • S 表示符号位 0 和 1。此处,1 用于表示负数,位 0 用于表示正数。
  • 借助二进制数字,可以表示整数。
  • 借助 ASCII 码,可以表示字符。
  • 指数是一种无符号二进制数,用 0 到 2047 之间的值表示。
  • 小数用 0 到 1 之间的值表示。

SIC/XE 包含一个额外的 48 位浮点数据类型,如下所示:

Simplified Instructional Computer (SIC)

值将使用以下公式表示:

例如

指令格式

简化的指令格式不适合 SIC/XE,因为 SIC/XE 的可用内存大小为 220 字节。这意味着 SIC/XE 的地址无法放入 15 位字段。

有两种方法可以解决内存相关问题,如下所述:

  • 可以使用**相对寻址**来解决,由指令格式 3 表示。
  • 可以通过**扩展地址字段**到 20 位来解决,由指令格式 4 表示。

SIC/XE 包含四种格式。其中,格式 1 和格式 2 不能用于引用内存。位 'e' 用于区分格式 3 和格式 4。

格式 1:这是一个 1 字节格式。例如:HIO、NORM、SIO、TIO。

Simplified Instructional Computer (SIC)

格式 2:这是一个 2 字节格式。

Simplified Instructional Computer (SIC)

寄存器由上述两个地址表示。因此,我们无需访问内存即可执行。

格式 3:这是一个 3 字节格式。

Simplified Instructional Computer (SIC)

当且仅当“n 位”和“i 位”均为 0 时,指令才会被解释为简单的 SIC 指令。

格式 4:这是一个 4 字节格式。

Simplified Instructional Computer (SIC)

其中

  • n 用于表示**间接位**
  • i 用于表示**立即位**
  • x 用于表示**索引位**
  • b 用于表示**基址位**
  • p 用于表示**PC 相对位**
  • e 用于表示**扩展位**

指令的变化可以通过上述位单独或组合解释,如下所示:

位表示用途
x = 1它用于显示索引寻址
e = 0它用于显示 3 字节格式
e = 1它用于显示 4 字节格式
b = 0 且 p = 1它用于显示 PC 相对寻址
b = 1 且 p = 0它用于显示基址或偏移寻址
n = 1 且 i = 1它用于显示直接寻址
n = 1 且 i = 0它用于显示间接寻址
n = 0 且 i = 1它用于显示立即寻址
n = 0 且 i = 0它用于显示简单的 SIC 解释。

因此,最后的 15 位以及 bpe 位被视为地址。

寻址模式

对于格式 3,SIC/XE 中引入了两种新的寻址模式,如下所述:

众数指示目标地址计算
基址相对b = 1, p = 0TA = (B) + disp(0 ≤ disp ≤ 4095)
程序计数器相对b = 0, p = 1TA = (PC) + disp(-2048 ≤ disp ≤ 2047)

如果在格式 3 中 **b 位**和 **p 位**都设置为 0,则 **disp** 被视为**目标地址**。这个过程称为**直接寻址模式**。借助直接、间接和相对寻址模式以及许多其他寻址模式,我们可以计算目标地址,如下所述:

基址相对寻址

如果我们使用基址相对模式,在这种情况下,disp 将是一个 12 位无符号整数。

Simplified Instructional Computer (SIC)

在此图像中,b 代表 Base(基址)。

程序计数器相对

如果我们使用程序计数器相对模式,在这种情况下,disp 将是一个 12 位有符号整数。

Simplified Instructional Computer (SIC)

在此图像中,p 代表 Program(程序)。

直接寻址

在直接寻址模式中,如果且仅当位 b 和 p 设置为 0 时,目标地址才能直接从地址字段或 disp 中获取。

Simplified Instructional Computer (SIC)

对于格式 3 和格式 4 的直接寻址,指示、目标地址和计算描述如下:

索引寻址

在索引寻址中,将 (x) 项添加到目标地址的计算中。如果位 x 设置为 1,在这种情况下,寄存器 X 的值将加到目标地址的计算中。

Simplified Instructional Computer (SIC)

对于格式 3 和格式 4 的直接索引寻址,指示和目标地址描述如下:

格式 3:n = 1, i = 1, x = 1, TA = (X) + disp

格式 4:n = 1, i = 1, x = 1, TA = (X) + address

现在我们将看到目标地址与位 i 和 n 的使用,如下所示:

众数指示操作数的值
立即寻址i = 1, n = 0TA = 将以操作数值的形式使用,没有内存引用
间接寻址i = 0, n = 1TA = 将获取目标地址处的字。TA 值将用作操作数值的地址。
简单寻址情况 1:i = 0, n = 0它将显示标准的 SIC
情况 2:i = 1, n = 1(TA) = TA(目标地址)将用作操作数值的地址。

立即索引模式描述如下:

Simplified Instructional Computer (SIC)

在此图像中,i 代表 immediate(立即)。

间接索引模式描述如下:

Simplified Instructional Computer (SIC)

在此图像中,n 代表 indirect(间接)。

简单寻址模式描述如下:

情况 1

Simplified Instructional Computer (SIC)

情况 2

Simplified Instructional Computer (SIC)

寻址模式示例

十六进制OPnIxbPedisp/地址目标地址加载到寄存器 A 的值
0326000000001100100110 0000 00003600103000
03C3000000001111000011 0000 0000639000C303
0220300000001000100000 0011 00003030103000
0100300000000100000000 0011 000030000030
0036000000000000110110 0000 00003600103000
0310C3030000001100010000 1100 0011 0000 0011C303003030

指令集

SIC 和 SIC/XE 的指令集几乎相同,但由于增加了浮点数据格式,SIC/XE 中包含一些额外的指令集。因此,SIC/XE 还提供了许多额外的指令,包括浮点算术指令。所有额外的指令描述如下:

  • SIC(简化的指令计算机)的标准指令
  • 使用以下操作加载和存储新寄存器:
  • LDB, STB 等

浮点算术运算描述如下:

寄存器移动运算描述如下:

寄存器到寄存器算术运算描述如下:

管理调用运算描述如下:

管理调用用于生成 OS(操作系统)的中断

输入/输出通道运算描述如下:

借助附录 A,我们可以获得所有指令的列表。附录的表示法描述如下:

C:条件码 CC

P:特权指令

A ← (x. .x+2):将从 x 开始的字移动到 A。

X:此指令仅在 SIC/XE 中可用

输入和输出

SIC/XE 提供 I/O 通道。借助此通道,我们可以在 CPU(中央处理单元)执行其他指令的同时执行输入和输出操作。它还允许输入或输出与计算的重叠。由于这种重叠,SIC/XE 的体系结构变得更加有效。I/O 的指令集是 SIO、TIO 和 HIO,它们分别能够启动、测试和停止 I/O 通道的操作。