Фибоначчи с использованием SBN в OISC на машинном языке - PullRequest
0 голосов
/ 08 апреля 2010

Я хочу создать ряд Фибоначчи с использованием SBN в архитектуре OISC. Мой первоначальный подход заключается в том, чтобы сначала реализовать его на ассемблере, а затем преобразовать в машинный язык. Первые этапы включают сохранение 0 и 1 в 2 регистрах, а затем вычитание 1 из 0 и повторное вычитание 1 на последующих этапах. Каждый раз, когда он генерирует отрицательное число, и, поскольку он отрицательный, он разветвляется и извлекает инструкцию поиска абсолютного значения.

Мой подход правильный? Моя путаница в значении OISC. Поправьте меня, если я ошибаюсь, если я выполняю вычитание и затем нахождение абсолютного значения, это означает, что я использую 2 инструкции каждый раз. или это то, что в процессоре OISC обе эти инструкции выполняются одновременно, что будет означать, что мой подход верен.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Общие инструкции по сборке могут быть синтезированы из комбинаций инструкции 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: ...

Важное понимание заключается в том, что , получив эти строительные блоки, вы можете строить более сложные блоки . Например, с ADD и BEQ вы можете легко реализовать цикл подсчета (который был бы полезен для Фибоначчи ...)

Таким образом, вы можете сделать следующее:

  1. Реализация Фибоначчи на обычном ассемблере (должно занимать не более нескольких строк)
  2. Посмотрите, какие инструкции вы можете заменить инструкциями, легко синтезируемыми из инструкций OISC
  3. Переписать с использованием OISC
1 голос
/ 14 октября 2017

У вас есть 2 способа об этом:

  • Ваша структура данных содержит истинные (положительный диапазон) числа Фибоначчи; если это так, вам действительно нужно сделать один шаг вычисления и один шаг отрицания (то, что вы называете абсолютным), т.е. минимум 2 на целое число.
  • Или вы можете решить 0-дополнение к нему: -1, -1, -2, -3, -5, -8 ... таким образом, вам просто нужно просто отменить результат, чтобы напечатать / предоставить и т. д. Это имеет быстрый одностадийный расчет, но при доступе к нему требуется небольшая стоимость перевода (т. е. когда вы распечатываете его пользователю).
...