仿照哈夫曼树(或前缀编码,Prefix-free)的解法,目前先不解释具体怎么画了,直接放例题,大家自己慢慢品味吧。

【例 1】某指令系统指令长 16 位,操作码字段为 4 位,地址码字段为 4 位,采用扩展操作码技术,形成三地址指令 15 条、二地址指令 15 条、一地址指令 15 条、零地址指令 16 条。

【解】指令格式如下:

OPA1A2A3
4 位4 位4 位4 位

画出对应的树:

【三地址】OP=0000~1110(15 条)

OP=1111

【二地址】A1=0000~1110(15 条)

A1=1111

【一地址】A2=0000~1110(15 条)

A2=1111

【零地址】A3=0000~1111(16 条)

沿着树的边一直走到叶子结点,可以得到如下格式的指令:

指令操作码地址码 1地址码 2地址码 3
15 条三地址指令0000A1A2A3
.0001A1A2A3
.............
.1110A1A2A3
15 条二地址指令11110000A2A3
.11110001A2A3
.............
.11111110A2A3
15 条一地址指令111111110000A3
.111111110001A3
.............
.111111111110A3
16 条零地址指令1111111111110000
.1111111111110001
.............
.1111111111111111

【例 2】某指令系统指令长 16 位,操作码字段为 4 位,地址码字段为 4 位,采用扩展操作码技术,形成三地址指令 15 条、二地址指令 12 条、一地址指令 63 条、零地址指令 16 条。

【解】指令格式如下:

OPA1A2A3
4 位4 位4 位4 位

画出对应的树:

【三地址】OP=0000~1110(15 条)

OP=1111

【二地址】A1=0000~1011(12 条)

A1=1100

A1=1101

A1=1110

A1=1111

【一地址】A2=0000~1111(16 条)

【一地址】A2=0000~1110(15 条)

A2=1111

【零地址】A3=0000~1111(16 条)

沿着树的边一直走到叶子结点,可以得到如下格式的指令:

指令操作码地址码 1地址码 2地址码 3
15 条三地址指令0000A1A2A3
.0001A1A2A3
.............
.1110A1A2A3
12 条二地址指令11110000A2A3
.11110001A2A3
.............
.11111011A2A3
63 条一地址指令111111000000A3
.111111000001A3
.............
.111111001111A3
.111111010000A3
.111111010001A3
.............
.111111111110A3
16 条零地址指令1111111111110000
.1111111111110001
.............
.1111111111111111

【例 3】某指令系统指令长 16 位,地址码字段为 6 位,采用扩展操作码技术,形成二地址指令 12 条、一地址指令 96 条、零地址指令 50 条。

【解】指令格式如下:

OPA1A2
4 位6 位6 位

画出对应的树:

【二地址】OP=0000~1011(12 条)

OP=1100

OP=1101

OP=1110

OP=1111

【一地址】A1=000000~111111(64 条)

【一地址】A1=000000~011111(32 条)

A1=100000

【零地址】A2=000000~110001(50 条)

【例 4】某指令系统指令长 12 位,操作码字段为 3 位,地址码字段为 3 位,采用扩展操作码技术,形成二地址指令 4 条、一地址指令 8 条、零地址指令 150 条。

【解】指令格式如下:

OPA1A2A3
3 位3 位3 位3 位

画出对应的树:

【二地址】OP=000~011(4 条)

OP=100

OP=101

OP=110

OP=111

【一地址】A1=000~111(8 条)

A1=000~111(8 种)

A1=000

A1=001

A1=010

【零地址】A2=000~111(8 条)

【零地址】A2=000~101(6 条)

【例 5】某指令系统指令长 16 位,地址码字段为 6 位,采用扩展操作码技术,如果已定义了 12 条二地址指令,则最多还可定义多少条一地址指令?

【解】指令格式如下:

OPA1A2
4 位6 位6 位

画出对应的树:

【二地址】OP=0000~1011(12 条)

OP=1100

OP=1101

OP=1110

OP=1111

【一地址】A1=000000~111111(64 条)

所以最多还可定义 4×26=256 条一地址指令。

【例 6】某指令系统指令长 32 位,地址码字段为 12 位,采用扩展操作码技术,如果已定义了 250 条二地址指令,则最多还可定义多少条一地址指令?

【解】指令格式如下:

OPA1A2
8 位12 位12 位

画出对应的树:

【二地址】OP=0000,0000~1111,1001(250 条)

OP=1111,1010

OP=1111,1011

OP=1111,1100

OP=1111,1101

OP=1111,1110

OP=1111,1111

【一地址】A1=000000,000000~111111,111111(2^12 条)

所以最多还可定义 6×212=24K 条一地址指令。

【例 7】(2022 年统考真题)设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为 6 位,包含零地址、一地址和二地址 3 种格式的指令。若二地址指令有 12 条,一地址指令有 254 条,则零地址指令的条数最多为( )。

A. 0

B. 2

C. 64

D. 128

【解】指令格式如下:

OPA1A2
4 位6 位6 位

画出对应的树:

【二地址】OP=0000~1011(12 条)

OP=1100

OP=1101

OP=1110

OP=1111

【一地址】A1=000000~111111(64 条)

【一地址】A1=000000~111101(62 条)

A1=111110

A1=111111

【零地址】A2=000000~111111(64 条)

所以最多还可定义 2×26=128 条零地址指令,本题选 D。

【例 8】(2017 年统考真题)某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个地址字段为 6 位,则指令字长至少应该是( )

A. 24 位

B. 26 位

C. 28 位

D. 32 位

【解】三地址指令条数满足 29<25=32,因此推断操作码字段 OP 至少为 5 位,指令格式可能如下:

OPA1A2A3
5 位6 位6 位6 位

画出对应的树:

【三地址】OP=00000~11100(29 条)

OP=11101

OP=11110

OP=11111

【二地址】A1=000000~111111(64 条)

【二地址】A1=000000~010100(21 条)

所以指令字长至少有 5+3×6=23 位,又因为计算机按字节编址,所以取成 24 位即 3 字节,本题选 A。