¿Cómo convertir de hexadecimal de 4 bits a ASCII de 7 bits?

La tarea es aprender la programación de ensamblajes escribiendo una subrutina que puede convertir entre 4 bit hexadecimal y 7 bit ASCII. Al principio no tenía idea, pero después de algunas investigaciones, pude hacer un esfuerzo y dibujar un diagrama de flujo y hacer un programa, pero no es del todo correcto, así que le pido su orientación para que me ayude a resolver esto.

El texto de la asignación real es este:

HA 3.1. Dibuje un diagrama de flujo para una subrutina para convertir un valor hexadecimal de 4 bits al código ASCII de 7 bits correspondiente. Consulte la especificación completa de hexasc a continuación. Ejemplo: el binario 0010 (dígito hexadecimal 2) se convierte a 011 0010 (código ASCII para '2'). Otro ejemplo: el binario 1011 (dígito hexadecimal B) se convierte a 100 0010 (código ASCII para 'B') Asegúrese de que su subrutina esté documentada de acuerdo con nuestros requisitos.

HA 3.2. Utilizando el proyecto de trabajo de laboratorio en el IDE de Nios II, cree un nuevo archivo llamado hexasc.s

HA 3.3. En el archivo hexasc.s, escriba una subrutina llamada hexasc, que convierte un valor hexadecimal de 4 bits al código ASCII de 7 bits correspondiente.

He dibujado un diagrama de flujo para el programa:

Y el programa que probé es este, pero sospecho que no está de acuerdo con las especificaciones:

        .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 

¿Puedes ayudarme a desarrollar y resolver esta tarea? Hay mucho tiempo, no se debe hasta en un mes.

Actualizar

Después de ver aquí en un comentario que el diagrama de flujo era incorrecto, hice los ajustes necesarios:

También quiero discutir cómo es correcto este algoritmo que se convierte entre hexadecimal y ASCII.

Actualizar / editar

Aquí está el 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

Respuestas a la pregunta(2)

Su respuesta a la pregunta