По порядку:
1. В своей подпрограмме вы не имеете права портить R5. Можно портить только R0-R3 и R12.
2. Результат должен возвращается в R0.
Код
static __asm int MUL_F1(int x, int y)
{
smull r0, r0, r1;
BX lr ; Return.
}
int main(void)
{
int x=0xfffff, y=0xffff;
int z;
z=MUL_F1(x, y);
}
3. Вы передаете rezult как параметр, получить что-либо обратно в него нельзя.
Чтобы иметь возможность что-то вернуть, можно использовать указатель:
Код
static __asm void MUL_F1(int *res, int x, int y)
{
smull r1, r1, r2;
str r1, [r0]
BX lr ; Return.
}
int main(void)
{
int x=0xfffff, y=0xffff;
int z;
MUL_F1(&z, x, y);
}