两套指令,同一个结果
运行下面这段程序,填写它打印出来的结果。 def seq_a(x): x = x + x x = x + x return x & 255 def seq_b(x): return (x * 4)
条数不同,字节数也不同
运行下面这段程序,填写它打印出来的结果。 a_count, a_each = 2, 4 b_count, b_each = 1, 4 print(str(a_count) + "/" + str(b_count) + &
把一个表达式编成指令序列
把 (a + b) * 2 编成本机指令序列。本机没有乘法指令,乘 2 只能用加法做。
换一套合同,重编一次
换到一个有乘法指令的指令集上,重编同一个表达式。把两套的指令条数和结果都打出来。
两套编译结果对一遍账
用四组输入,检查「没有乘法」和「有乘法」两套编译出来的结果是不是永远一致。
三家在指令长度上的区别
x86 的指令是变长的,ARM 和 RISC-V 的主体指令是定长的。这个差别带来的是【0】。
RISC-V 最特别的地方
RISC-V 和 x86、ARM 最不一样的一点是【0】。
同一段程序,三种编码各占多少字节
运行下面这段程序,填写它打印出来的结果。 progs = [("定长四字节", 5, 4), ("定长两字节", 5, 2)] for name, n, each in progs: prin
定长下,地址一算就出来
运行下面这段程序,填写它打印出来的结果。 for i in range(5): print(i * 4, end="/")
自己写:定长下的地址表
每条指令 4 字节,算出前 5 条各自的起始地址。