0

这是程序:

STZ 1
ENNX 1
STX 1(0:1)
SLAX 1
ENNA 1
INCX 1
ENT1 1
SRC 1
ADD 1
DEC1 -1
STZ 1
CMPA 1
MOVE -1,1(1)
NUM 1
CHAR 1
HLT 1

到目前为止我所知道的:

  • STZ 1 将下一条指令设置为 NOP,因此可以忽略第二条指令
  • 根据答案 - ADD 函数应该触发溢出。
  • ADD 函数应该将内存 1 的内容添加到寄存器 A

使用第一个命令将存储器 1 设置为零 - ADD 功能应该简单地将零添加到寄存器 A。

如果 Mem1 设置为零,这如何将溢出切换设置为打开?

REF:计算机编程的艺术第 1 卷第 142 页问题 18

4

1 回答 1

2

该程序似乎使用位置 1 作为数据,因此代码本身应该位于该位置之后的某个位置,就像在黑暗中的刺一样,例如从 0x10 开始。如果代码从 0(或 1)开始,那么它将覆盖自身,产生不希望的结果。

较旧的计算机,如 PDP-8,会在 0 处启动程序计数器,但也会像这样使用较低的数据(在零页上),因此您会看到程序在 0 处包含第一条指令,即跳转到实际代码开始,然后是数据,然后是实际代码。

于 2022-02-16T16:16:58.580 回答