0

OISCアーキテクチャでSBNを使用してフィボナッチ数列を生成したいと思います。私の最初のアプローチは、最初にアセンブリ言語で実装してから、機械語に変換することです。最初のステップでは、2つのレジスタに0と1を格納してから、0から1を減算し、その後のステップで1を繰り返し減算します。負の数を生成するたびに、負の数であるため、分岐して絶対値検索命令をフェッチします。

私のアプローチは正しいですか?OISCの意味での私の混乱。私が間違っている場合は訂正してください。減算を実行してから絶対値を見つける場合は、毎回2つの命令を使用していることを意味します。または、OISCプロセッサでは、これらの両方の命令が同時に実行されるため、私のアプローチは正しいことを意味します。

4

2 に答える 2

3

一般的なアセンブリ命令は、OISC命令の組み合わせから合成できます。たとえば、ウィキペディアのページから引用したものです。

ADD a, b == subleq a, Z
            subleq Z, b
            subleq Z, Z

そしてBEQ

BEQ b, c == subleq b, Z, L1
            subleq Z, Z, OUT
        L1: subleq Z, Z
            subleq Z, b, c
       OUT: ...

重要な洞察は、これらのビルディングブロックを取得すると、より複雑なブロックを構築できるということです。たとえば、を使用するADDBEQ、カウントループを簡単に実装できます(これはフィボナッチに役立ちます...)

したがって、次のことができます。

  1. 通常のアセンブリ言語でフィボナッチを実装します(最大で数行かかるはずです)
  2. OISC命令から簡単に合成できる命令の代わりに使用できる命令を確認してください
  3. OISCを使用して書き直します
于 2010-04-09T17:47:24.390 に答える
1

あなたはそれについて2つの方法があります:

  • データ構造には、真の(正の範囲の)フィボナッチ数が含まれています。もしそうなら、あなたは確かに1つの計算と1つの否定(あなたが絶対と呼ぶもの)ステップを行う必要があるでしょう、すなわち。整数あたり最低2。
  • または、その0の補数を解くことができます:-1、-1、-2、-3、-5、-8 ...このように、印刷/提供などのために結果を否定するだけで済みます。これは1ステップの計算が高速ですが、アクセスするとき(つまり、ユーザーに印刷するとき)の翻訳コストはわずかです。
于 2017-10-14T01:22:55.043 に答える