Факториал в ОАМ - PullRequest
       69

Факториал в ОАМ

0 голосов
/ 19 октября 2010

У меня есть некоторый код OAM здесь, и я просмотрел все инструкции, что они делают, как они действуют, и я переписал все это псевдо, но у меня возникла проблема с поиском (так что я могу сосчитатьсколько) циклов в программе.Я чувствую, что это должно смотреть мне в глаза, и я сделал тысячу факторных программ на C / Java и т. Д., Но я не вижу этого здесь.

alt text

Таким образом, он принимает пользовательскую запись, если == 0, он прерывается на done [brz], если> 0 break, чтобы пропустить [brp] neg, используемый для отмены значения для значения abs

Процедура пропуска выполняет умножение и decrememntsзатем следуют дополнительные условия, чтобы увидеть, нужно ли вызывать его снова или программа завершена.

Мне нужно, по сути, найти циклы в этой программе.Как я уже сказал, это, вероятно, смотрит мне в лицо, но это часто задаваемый вопрос со стороны цессионария.

РЕДАКТИРОВАТЬ, чтобы уточнить: программа не принимает факториал одного числа, а скорее умножает факториалкаждого введенного числа.

Таким образом, я мог бы ввести 3, -4, 2, 0, и результат будет 288. (3 * 2 * 1) (4 * 3 * 2 * 1) (2 *1)

РЕДАКТИРОВАТЬ для BRI:

read: noop
      lda stdin
      brp return
      neg

return: bri read

1 Ответ

1 голос
/ 19 октября 2010

Ну, это не просто факториал .. Это будет версия C:

    int result = 1, value;
    while(value = get_int()) {
next_loop:
        value = abs(c);
        do {
skip_loop:
            result *= value;
            value--;
        } while (value > 0);
    };
    printf("%d\n", result);

Так что это произведение факториалов, и в нем ровно две петли.

...