📜  门| Gate IT 2008 |第36章

📅  最后修改于: 2021-06-29 03:50:44             🧑  作者: Mango

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

有效地址是操作数的地址。
在给定的问题格式是(操作码,源,目标),
目的地←源op目的地
除-(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作为数据在新位置X处的数据,Operand2 = 5;
现在,在X位置将其相加推回,该位置仍为99
因此,我们的结果是位置99填充了15,这是期望的结果。

2.添加(X),(X)-
以操作数1作为存储位置X的数据。将操作数1作为数据存储位置100 = 10,然后将操作数2作为存储位置X的数据仍为100,操作数2 = 10;将操作数2作为存储位置X的数据。
现在,将其加法返回到位置X,即100
因此,我们的结果是位置100被20填充,这不是期望的结果。

3.添加-(X),(X)+
递减,然后将操作数1作为数据在内存位置X处。因此X = 99; Operand1用作数据存储位置99 = 5
然后递增,然后将操作数2作为数据在存储位置X处
X = X + 1;
X = 100;

操作数2 = 10;
现在,将其加法返回到位置X,即100
因此,我们的结果是位置100被15填充,这不是期望的结果。

4.添加-(X),(X)
递减,然后将操作数1作为数据在内存位置X处。因此X = 99;
Operand1用作数据存储位置99 = 5
然后将操作数2作为数据在存储位置X处为99
操作数2 = 5;
现在,将它们的加法推回X的位置99
因此,我们的结果是位置99填充了10,这不是期望的结果。

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