两种编码,结果必须一样

同一件事用两套指令算:一套五条精简指令,一套两条复杂指令。把两边的结果和总字节数都打出来。

开始练习 →

字段划分的本质是什么

一条指令要切成操作码、寄存器号、立即数几个字段。这件事的本质是【0】。

开始练习 →

操作码多给一位,代价是什么

把操作码从 2 位加到 3 位,能表达的指令翻倍。代价是【0】。

开始练习 →

为什么把寄存器号放在固定位置

RISC-V 把寄存器号固定放在同样的几位上,不管是哪条指令。这样做是为了【0】。

开始练习 →

同一笔八位预算,两种花法

运行下面这段程序,填写它打印出来的结果。 for op, rg, im in ((2, 1, 5), (3, 2, 3)): print(str(2 ** op) + "-" + str(2 ** rg) + &

开始练习 →

同一串位,两种格式译出两种东西

运行下面这段程序,填写它打印出来的结果。 def decode_a(w): return (w >> 6) & 3, (w >> 5) & 1, w & 31 def decode_b

开始练习 →

自己写:另一种指令格式

照着 3+2+3 的切法写一个新译码器,把同一串位译成「操作码 - 寄存器号 - 立即数」。

开始练习 →

自己写:算这笔位宽预算

给定三个字段各占几位,算出「最多几条指令 / 几个寄存器 / 立即数最大是几」,并检查三段位数加起来是不是正好八位。

开始练习 →

⚠️ 用错格式去译,它不会报错

拿 3+2+3 的译码器去译一条按 2+1+5 编码的指令。⚠️ 它照样译得出来——把两种译法的结果都打出来。

开始练习 →

立即数寻址和寄存器寻址

一条指令要用一个数。立即数寻址和寄存器寻址的差别是【0】。

开始练习 →