Написать программу ARM Assembly Language для вычисления n-го числа Фибоначчи - PullRequest
0 голосов
/ 10 октября 2018

Я только начинаю программировать и вычислять и получил задание, которое действительно смущает меня.Он состоит из двух частей: 1. Напишите программу на языке ассемблера ARM для вычисления n-го числа Фибоначчи.N-е число Фибоначчи рекурсивно определяется как: Fn = Fn-1 + Fn-2, где F0 = 0 и F1 = 1. Используйте R2 для n и вычислите Fn в R0.Проверьте свою программу, вычислив F16 и F32.2. Используя ваш ответ на вопрос Q1 в качестве отправной точки, напишите программу на языке ассемблера ARM для вычисления максимально возможного числа Фибоначчи с использованием (i) 32-разрядной арифметики без знака и (ii) 32-разрядной арифметики со знаком.Убедитесь, что вы указали значения n и Fn (в шестнадцатеричном и десятичном виде) в представлении проекта.

if (MAX - Fn-1

Пока у меня есть:

        AREA    RESET, CODE, READONLY
        ENTRY

start   MOV     R1, #16     ; n = 16
        MOV     R3, #0      ; fn1 = 0
        MOV     R0, #1      ; fn = 1
        MOV     R2, #1      ; curr = 1
whn     CMP     R2, R1      ; while (curr < 1)
        BHS     endwhn      ; {
        ADD     R2, R2, #1  ;   curr = curr + 1
        MOV     R4, R0      ;   tmp = fn
        ADD     R0, R0, R3  ;   fn = fn + fn1
        MOV     R3, R4      ;   fn1 = tmp
        B       whn         ; }
endwhn

STOP    B       STOP

        END

1 Ответ

0 голосов
/ 10 октября 2018

Итак, вы хотите проверить флаги после этой инструкции.

    ADD      R0, R0, R3      ; fn = fn + fn1

Но флаги не устанавливаются.Так что добавьте суффикс S.

    ADDS     R0, R0, R3      ; fn = fn + fn1

Далее вы хотите избежать повторения цикла в случае переполнения.

( Редактировать: Давайте получим этоответвление, если оно не переполнено .)

Для 32-разрядного без знака флаг переноса (C) устанавливается (CS) при переполнении, очищается (CC), если цикл долженбыть повторенным.

    BCC      whn              ; }

Для 32-разрядных со знаком флаг переполнения (V) устанавливается (VS) при переполнении, снимите (VC), если цикл должен повторяться.

    BVC      whn              ; }

(Прошло двадцать лет с тех пор, как я занимался программированием на ARM. Предполагается, что AArch32.)

...