Skip to content

2010年 408 计算机组成原理 第 43 题

计算机组成原理2010年综合题11分

题目

某计算机字长为 16 位,主存地址空间大小为 128KB,按字编址。采用单字长指令格式,指令各字段定义如下:

1512OP4 bits119Ms3 bits86Rs3 bits53Md3 bits20Rd3 bits

转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义如下:

Ms/Md寻址方式助记符含义
000B寄存器直接Rn操作数 = (Rn)
001B寄存器间接(Rn)操作数 = ((Rn))
010B寄存器间接、自增(Rn)+操作数 = ((Rn)), (Rn) + 1 → Rn
011B相对D(Rn)转移目标地址 = (PC) + (Rn)

请回答下列问题:

(1) 该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需要多少位?

(2) 转移指令的目标地址范围是多少?

(3) 若操作码 0010B 表示加法操作(助记符为 add),寄存器 R4 和 R5 的编号分别为 100B 和 101B,R4 的内容为 1234H,R5 的内容为 5678H,地址 1234H 中的内容为 5678H,地址 5678H 中的内容为 1234H,则汇编语言为“add (R4), (R5)+”(逗号前为源操作数,逗号后为目的操作数)对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么

解析

本题是典型的"指令格式 + 寻址方式 + 机器码生成"组合考查。三问层层递进:先从字段位宽倒推规模,再分析寻址范围,最后做机器码拼装与执行追踪。

(1) 指令数、寄存器数、MAR/MDR 位数 [4 分]

最多指令条数。 操作码 OP 占 4 位:

最多通用寄存器数。 每个操作数 6 位 = 寻址方式 Ms/Md(3 位)+ 寄存器编号 Rs/Rd(3 位)。寄存器编号字段决定了寄存器数:

MAR / MDR 位数。 主存 128KB,按字编址,字长 16 位 = 2B,所以总字数为:

要寻址 个字,MAR 至少 16 位;一次读写一个字,MDR 一次容纳一个字宽数据,故 MDR 至少 16 位

(2) 转移指令的目标地址范围 [2 分]

转移指令使用相对寻址(Ms = 011B),目标地址 = (PC) + (Rn)。题干声明 "相对偏移量用补码表示",所以 Rn 的内容当作补码符号扩展后参与运算。

PC、Rn 都是 16 位寄存器,相加结果对 取模,能落在 16 位无符号能表示的全部地址上。结合主存空间也是 字,所以:

(3) "add (R4), (R5)+" 的机器码与执行结果 [5 分]

Step 1. 解析汇编语义。

  • 源操作数 (R4):Ms = 001(寄存器间接),Rs = 100(R4 编号);
  • 目的操作数 (R5)+:Md = 010(寄存器间接、自增),Rd = 101(R5 编号);
  • 操作码 add:OP = 0010

Step 2. 拼接机器码。

按字段顺序 [15:12] OP / [11:9] Ms / [8:6] Rs / [5:3] Md / [2:0] Rd

字段OPMsRsMdRd
二进制0010001100010101
含义add寄存器间接R4寄存器间接、自增R5

完整机器码:

0010 0011 0001 0101B

转十六进制:2315H

Step 3. 追踪执行过程。

题干给出:(R4) = 1234H,(1234H) = 5678H,(R5) = 5678H,(5678H) = 1234H。

步骤动作结果
① 取源源 = ((R4)) = (1234H)= 5678H
② 取目的目的 = ((R5)) = (5678H)= 1234H
③ 加法源 + 目的 = 5678H + 1234H= 68ACH
④ 写回结果送目的地址 (R5) → 主存 5678HM[5678H] ← 68ACH
⑤ 自增(R5)+ 后效:R5 ← (R5) + 1R5 ← 5679H

Step 4. 写出最终改变。

位置改变前改变后
R55678H5679H
主存 5678H1234H68ACH

易错点(双层间址绕晕): 第 (3) 问的 R4 / R5 都是间接寻址,"寄存器内容"是地址,"地址里的内容"才是操作数。务必把 (R4)、((R4))、(R5)、((R5)) 写清楚再代入运算,不要把 R4 的值 1234H 当成源操作数直接加。

编者注(生僻术语): "寄存器间接、自增"((Rn)+)相当于 C 语言的 *p++:先用 *p 作为操作数,使用完后 p 自增。本题字长 16 位、按字编址,所以自增量为 1(一个字)。在字节编址 + 字长 4B 的机器上,自增量会是 4。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数