0

我有一个关于汇编语言的相当简单的问题。我们使用的是 SIC/XE 架构,它基本上是可信的,仅用于教育目的,但确实遵循其他架构的通用约定。现在我的问题和答案的第一个想法。

假设符号 ALPHA 和 BETA 是源程序中的标签。以下两个语句序列有什么区别?

A.) LDA ALPHA-BETA

B.) LDA ALPHA
    SUB BETA

为清楚起见,LDA 将数据加载到用于算术运算的寄存器 A 中。像这里看到的 SUB 或 ADD 之类的操作默认在寄存器 A 上工作,而无需声明它。

现在,乍一看,我假设 A 和 B 是等价的。我的逻辑很简单。将 ALPHA 和 BETA 的差值加载到 A 中,或者将 ALPHA 加载到 A 中,然后从寄存器 A 中的 ALPHA 中减去,BETA。在我看来,哪个完成了同样的事情?我错过了一些琐碎的细节还是真的像看起来那么简单?

4

1 回答 1

2

LDA接受内存中的单个地址,并从该位置加载一个字。因此,LDA ALPHA-BETA将从 address 加载一个单词ALPHA-BETA。然而,第二个代码将加载一个单词,ALPHA然后减去该单词 at BETA

认为:

ALPHA=103
BETA=100
mem[3]=42
mem[100]=2
mem[103]=3

现在,LDA ALPHA-BETA将被组装为LDA 3仅在地址处加载单词3,即42在我们的示例中。第二个代码将首先加载地址处的字103,即3,然后减去地址处的字1002因此结果将是1

于 2015-09-30T22:17:11.980 回答