自己写:变长下的地址表

每条指令长度各不相同,算出各自的起始地址。⚠️ 这次只能顺着往下累加。

开始练习 →

算一算两种编码的密度比

同一段程序,定长要 20 字节、变长要 14 字节。算出两者的比值(保留两位小数)。

开始练习 →

⚠️ 变长指令从中间开始译

变长指令集里,如果从一条指令的中间开始译,⚠️ 译出来的照样是「合法」的指令。把正着译和错位译的结果都打出来。

开始练习 →

说清一条指令的语义要说哪几样

要把一条指令的语义讲清楚,至少得说明【0】。

开始练习 →

两条指令等价的判据

说两条指令序列「等价」,判据是【0】。

开始练习 →

把一条指令的语义摊开

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

开始练习 →

自己写:语义描述器

补全 semantics:对任意一条指令,交出「读了什么 / 写了什么 / 走向变没变」。

开始练习 →

同一条指令,换个寄存器值

同一条指令,喂两组不同的寄存器初值,看语义描述有什么不同。

开始练习 →

两套指令序列的等价性验收

用全部 256 个初值验一遍:「加两次 4」和「加一次 8」在这台机器上是不是永远等价。

开始练习 →

⚠️ 同一串位,两份合同两种语义

同一串位,分别按 2+1+5 和 3+2+3 两份合同去译,各自执行一遍。⚠️ 两边都是算术指令、都不报错,结果却完全不同。

开始练习 →