0

我需要创建 MAL 的扩展。所以,首先我尝试添加 mic1sim.mal

MAR = SP = SP + 1;  rd             // read top of the stack
H = TOS                           // H will be a SP
MDR = H = H >> 1; wr              // SHIFT 1  and write on MDR
MDR = H = H >> 1; wr                 // SHIFT 1 + 1 = 2
MDR = H = H >> 1; wr              // SHIFT 1 + 1 + 1 = 3
MDR = H = H >> 1: wr              // 4th shift
TOS = MDR; goto Main1             // TOS updated

但不起作用!有人可以解释我哪里错了吗?

4

1 回答 1

0

SP 指向栈顶。SP + 1 指向不再在堆栈上的数据。读取此值将返回垃圾。您有一个条件,即在第三条指令中将两个不同的值写入 MDR:ALU 操作的结果和第一条指令中读取的内存数据。

不必在每班后写。在 H 中计算结果。完成后,将 H 的值存储到 MDR 并将值写入堆栈。

TOS 在指令开始时已经拥有栈顶值。没有必要阅读它。

于 2016-05-11T12:44:33.823 回答