6502 汇编器中的斐波那契数列

问题描述 投票:0回答:1

我正在尝试在 6502 汇编器中构建斐波那契数列。它需要至少一个加法函数、至少一个分支函数和至少一个比较函数。我知道如何添加和存储整数,但我对分支和比较函数感到困惑。

我使用下面的指令集。

assembly fibonacci 6502
1个回答
0
投票

在 C 代码中,我们可能会使用结构化语句,这里是一个 while 循环:

while ( a < 100 ) {
    // loop body
}
// more code

而使用所谓的 if-goto-label ,则相同(仍在 C 中):

Loop1:
   if ( a >= 100 ) goto Loop1Exit;
   // loop body
   goto Loop1;
Loop1Exit:
   // more code

因此,希望您看到这两种结构是等效且相同的,因此运行方式相同,尽管后者有点冗长。两者都将运行相同的循环体并进行相同的迭代次数。

然而,后一种形式更接近汇编语言,它也使用 if-goto-label。

那么,组装的关键是如何翻译语句

if ( a >= 100 ) goto Loop1Exit;

。 if-goto-label 语句的问题在于,处理器在一条指令中通常需要处理太多操作数(这些操作数是 
a
>=
100
Loop1Exit
,我们可以想象一般来说,每个操作数都会有所不同。)

因此,许多指令集中的解决方案是使用条件代码将 if-goto-label 构造拆分为两条指令。第一个是

a

100
 的比较,用于设置条件代码,第二个是使用条件 
>=
 和标签目标 
Loop1Exit
 的分支,用于读取条件代码。

这两条指令通过条件代码进行通信,但您可以将它们理解为通过两条指令序列执行 if-goto-label 构造。

© www.soinside.com 2019 - 2024. All rights reserved.