Итак, у меня была следующая задача, которую нужно написать на 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
Код работает нормально, но я хочу знать, могут ли быть какие-нибудь небольшие улучшения / ярлыки. Я также немного не уверен в комментариях, но считаю, что то, что я написал, правильно.