算术的汇编语言语法问题

时间:2015-09-30 21:44:19

标签: assembly

我有一个关于汇编语言的相当简单的问题。我们使用的是SIC / XE架构,它基本上只是为了教育目的,但是它遵循其他架构的通用惯例。现在我的问题和对答案的初步想法。

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

A.) LDA ALPHA-BETA

B.) LDA ALPHA
    SUB BETA

为了清楚起见,LDA将数据加载到寄存器A中,寄存器A用于算术运算。而像SUB这样的操作,或者ADD,默认情况下在寄存器A上运行,而不必声明它。

现在,乍一看,我假设A和B都是等价的。我的逻辑很简单。加载到ALPHA和BETA的差异,或者加载到A,ALPHA中,然后从寄存器A,BETA中的ALPHA中减去。在我看来,完成同样的事情?我错过了一些微不足道的细节还是它看起来真的很简单?

1 个答案:

答案 0 :(得分:2)

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

假设:

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

现在,LDA ALPHA-BETA将汇总为LDA 3,只会在地址3加载单词,即我们示例中的42。第二个代码首先加载地址103,即3,然后减去100地址2的字,结果将是1