Рекурсивная сумма сборки ARM 1..n - PullRequest
1 голос
/ 06 мая 2020

Итак, у меня была следующая задача, которую нужно написать на ARM Assembly

Пожалуйста, проверьте подпрограмму, передав значение n равное 5. Результат должен быть равен 15. Если n равно 3, результат 6.

Мне дали соответствующий Java код:

  int sum (int n)      
   {          
        int result;          
        if (n == 1)           
            return 1;          
        result = Sum (n‐1) + n;   
        return result;      
    }  

И я написал следующий код в ARM Assembly

        NAME main
        PUBLIC main
        SECTION .text: CODE (2)
        THUMB

main
        LDR R4, =0x005          ; Value n
        BL SUM

STOP    B STOP

SUM     
        MOV R1, #0x01
        PUSH {R1, LR}
        ADD R5, R5, R4          ; R5 = result
        CMP R5, #1              ; Compare result to 1
        BEQ ADD1

ADD0
        SUB R4, R4, #1          ; Value n - 1
        CMP R4, #0              ; Compare n to 0        
        BEQ ADD1
        BL SUM

ADD1
        POP {R4, LR}
        BX LR                   ; Branch and exchange instruction set

        END

Код работает нормально, но я хочу знать, могут ли быть какие-нибудь небольшие улучшения / ярлыки. Я также немного не уверен в комментариях, но считаю, что то, что я написал, правильно.

...