两种编码,结果必须一样
同一件事用两套指令算:一套五条精简指令,一套两条复杂指令。把两边的结果和总字节数都打出来。
字段划分的本质是什么
一条指令要切成操作码、寄存器号、立即数几个字段。这件事的本质是【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】。