Boas,
Dica para não perderem os valores dos registos num CALL.
Como o nº de registos é limitado e para facilitar a gestão dos mesmos, podem fazer o seguinte ;
Antes de executar o CALL a uma rotina podem guardar todos os registos (R0...R10) numa stack (usando uma area de memoria apenas para este fim).
Executar a rotina pretendida sem a preocupação de não "estragar" os valores nos registos.
Após a execução da rotina apontar o SP para a stack onde estão os Registos guardados e repor os valores dos registos.
Obs; Isto são apenas dicas não solucções
Bom trabalho,