📜  门|门 IT 2008 |第 36 题

📅  最后修改于: 2021-09-25 07:21:21             🧑  作者: Mango

假设EA=(X)+为有效地址等于地址X的内容,计算有效地址后X增加一个字长; EA = -(X) 为有效地址等于地址 X 的内容,在计算有效地址之前 X 递减一个字长; EA = (X)− 是等于地址 X 内容的有效地址,计算有效地址后 X 递减一个字长。指令的格式是(opcode, source, destination),意思是(destination ← source op destination)。使用X作为栈指针,以下哪条指令可以从栈顶弹出两个元素,执行加法操作,并将结果压回到栈中。
(A) 加(X)−, (X)
(B) 加(X), (X)−
(C) 加-(X), (X)+
(D) 加-(X), (X)+答案:(一)
解释:

有效地址是操作数的地址。
在给定的问题格式是(操作码,源,目的地),
目的地 ← 源操作目的地
Ex- ADD (X),(Y) ->
来源=位置 X
目的地=位置 Y
Y 处的操作数 = X 处的操作数 + Y 处的操作数

这里,
-X = 递减指针 X,然后将指针指向的新位置用于操作数。
+X = 增加指针 X,然后将指针指向的新位置用于操作数。
X- = 递减指针 X 但首先使用 X 指向的旧位置。
X+ = 递增指针 X 但首先使用 X 指向的旧位置。

Pointer Memory location Data
X Memory location 100 10
X-1 Memory location 99 5

然后,我们的输出应该弹出前两个元素,即 10 和 5,并将结果放入内存位置 99。

1. ADD (X)- ,(X) -> 将操作数 1 作为内存位置 X 的数据,然后将 X 递减。 操作数 1 作为数据内存位置 100 = 10,

X=X-1;
X=99;

然后将操作数 2 作为内存位置 new X 处的数据,操作数 2= 5;
现在,在位置 X 推回他们的添加,它仍然是 99
因此,我们的结果是位置 99 填充了 15,这是所需的结果。

2. 加(X), (X)−
取操作数1作为内存位置X的数据。操作数1作为内存位置100=10的数据,然后将操作数2作为内存位置X的数据仍然是100,操作数2=10;
现在,在位置 X 推回他们的加法,即 100
所以,我们的结果是位置 100 被 20 填充,这不是想要的结果。

3. 加-(X), (X)+
递减然后取操作数1作为内存位置X的数据。所以X=99;操作数 1 作为数据存储器位置 99 = 5,
然后递增,然后将操作数 2 作为内存位置 X 处的数据
X=X+1;
X=100;

操作数 2=10;
现在,在位置 X 推回他们的加法,即 100
因此,我们的结果是位置 100 填充了 15,这不是所需的结果。

4.添加 -(X), (X)
递减然后取操作数1作为内存位置X的数据。所以X=99;
操作数 1 作为数据存储器位置 99 = 5,
然后将操作数2作为内存位置X处的数据,即99
操作数 2=5;
现在,在位置 X 推回他们的添加,即 99
因此,我们的结果是位置 99 填充了 10,这不是所需的结果。

该解决方案由Shashank Shanker khare 提供
这个问题的测验