Como converter de hexadecimal de 4 bits para ASCII de 7 bits?

O objetivo é aprender programação assembly escrevendo uma sub-rotina que pode converter entre 4 bits hexadecimais e 7 bits ASCII. No começo eu não tinha ideia, mas depois de alguma pesquisa eu poderia fazer e esforço e desenhar um fluxograma e fazer um programa, mas não é totalmente correto, então eu estou pedindo sua orientação para me ajudar a resolver isso.

O texto da atribuição real é este:

HA 3.1. Desenhe um fluxograma para uma sub-rotina para converter um valor hexadecimal de 4 bits no código ASCII de 7 bits correspondente. Veja a especificação completa para hexasc abaixo. Exemplo: o binário 0010 (dígito hexadecimal 2) é convertido em 011 0010 (código ASCII para '2'). Outro exemplo: o binário 1011 (dígito hexadecimal B) é convertido em 100 0010 (código ASCII para 'B') Certifique-se de que sua sub-rotina está documentada de acordo com nossos requisitos.

HA 3.2. Usando o projeto de laboratório no IDE do Nios II, crie um novo arquivo chamado hexasc.s

HA 3.3. No arquivo hexasc.s, escreva uma sub-rotina chamada hexasc, que converte um valor hexadecimal de 4 bits no código ASCII de 7 bits correspondente.

Eu desenhei um fluxograma para o programa:

E o programa que eu tentei é isso, mas eu suspeito que não está de acordo com as especificações:

        .global main 

        .text
        .align 2

main:   movi r8, 0x09
        movi r9, 0x0f

        andi r4, r4, 0x0f

        bgt r8, r4, L1  

        movi r2, 0x1e
        add r2, r2, r4  
        andi r2, r2, 0xff

        movia   r2,putchar
        br  L2  

L1:     movi r2, 0x29   
        add r2, r2, r4
        andi r2, r2, 0xff

        movia   r2,putchar

L2:  .end 

Você pode me ajudar a desenvolver e resolver essa tarefa? Há muito tempo, não é devido até daqui a um mês.

Atualizar

Depois de ver aqui em um comentário que o fluxograma estava incorreto, fiz os ajustes necessários:

Eu também quero discutir como este algoritmo está correto que converte entre hexadecimal e ASCII.

Atualizar / editar

Aqui está o programa completo.

.global hexasc 

        .text
        .align 2

hexasc: movi r8, 0x09
        movi r9, 0x0f
        andi r4, r4, 0x0f #keep only 4 bits
        bgt r4, r8, L1  #is x>9?
        movi r2, 0x30
        add r2, r2, r4  
        andi r2, r2, 0xff
        ret  

L1:     movi r2, 0x37
        add r2, r2, r4
        andi r2, r2, 0xff
        ret

questionAnswers(2)

yourAnswerToTheQuestion