自己写:变长下的地址表
每条指令长度各不相同,算出各自的起始地址。⚠️ 这次只能顺着往下累加。
开始练习 →
算一算两种编码的密度比
同一段程序,定长要 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 两份合同去译,各自执行一遍。⚠️ 两边都是算术指令、都不报错,结果却完全不同。
开始练习 →