2010-04-08 12 views
0

Je veux générer des séries de fibonacci en utilisant SBN dans une architecture OISC. Mon approche initiale consiste à l'implémenter en langage assembleur puis à le convertir en langage machine. Les premières étapes impliquent de stocker 0 et 1 dans 2 registres, puis soustraire 1 de 0 et soustraire de façon répétée 1 dans les étapes suivantes. Chaque fois qu'il génère un nombre négatif et depuis son négatif, il bifurque et récupère l'instruction de recherche de valeur absolue.Fibonacci utilisant SBN dans OISC en langage machine

Mon approche est-elle correcte? Ma confusion dans le sens de l'OISC. Corrigez-moi si je me trompe, si j'effectue une soustraction et ensuite une valeur absolue, cela signifie que j'utilise 2 instructions à chaque fois. ou est-ce que dans le processeur OISC ces deux instructions sont faites à la fois ce qui signifierait que mon approche est correcte.

+0

Cela me ressemble. –

+0

@Jonas: oui, mais il semble qu'il tente une solution ... –

Répondre

2

Des instructions d'assemblage courantes peuvent être synthétisées à partir de combinaisons de l'instruction OISC. Par exemple, tiré de la Wikipedia page, plus:

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

Et BEQ:

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

L'idée importante est que une fois que vous avez ces blocs de construction, vous pouvez construire des blocs plus complexes. Par exemple, avec ADD et BEQ vous pouvez facilement mettre en œuvre une boucle de comptage (ce qui serait utile pour Fibonacci ...)

vous pouvez donc faire ce qui suit:

  1. Mettre en oeuvre Fibonacci dans un langage assembleur normal (devrait prendre quelques lignes au plus)
  2. Voir quelles instructions vous pouvez remplacer les instructions synthétisable facilement à partir des instructions OISC
  3. Rewrite utilisant OISC
+0

Merci Eli, je vais essayer. – velociraptor

1

Vous avez 2 façons de son sujet:

  • Votre structure de données contient la vraie (plage positive) les nombres de Fibonacci; si c'est le cas, vous devez en effet faire une étape de calcul et une de négation (ce que vous appelez absolu), c'est-à-dire. minimum 2 par entier.
  • Ou, vous pouvez résoudre le 0-complément de celui-ci: -1, -1, -2, -3, -5, -8 ... de cette façon, il vous suffit simplement de nier le résultat à imprimer/Fournir etc. Il a un calcul rapide en une étape, mais il a un faible coût de traduction lorsque vous y accédez.