我有一个关于汇编语言的相当简单的问题。我们使用的是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中减去。在我看来,完成同样的事情?我错过了一些微不足道的细节还是它看起来真的很简单?
答案 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
。