Как конфертировать из 4-разрядного шестнадцатеричного в 7-разрядный ASCII?

Задача состоит в том, чтобы научиться программированию на ассемблере, написав подпрограмму, которая может конвертировать между 4-битным шестнадцатеричным и 7-битным ASCII. Сначала я понятия не имел, но после некоторого исследования я мог приложить усилия и нарисовать блок-схему и сделать программу, но это не совсем правильно, поэтому я прошу вашего руководства, чтобы помочь мне решить эту проблему.

Фактический текст назначения таков:

HA 3.1. Draw a flow-chart for a subroutine to convert a 4-bit hexadecimal value to the corresponding 7-bit ASCII-code. See the full specification for hexasc below. Example: binary 0010 (hexadecimal digit 2) is converted to 011 0010 (ASCII-code for '2'). Another example: binary 1011 (hexadecimal digit B) is converted to 100 0010 (ASCII-code for 'B') Make sure that your subroutine is documented according to our requirements.

HA 3.2. Using the labwork project in the Nios II IDE, create a new file called hexasc.s

HA 3.3. In the file hexasc.s, write a subroutine called hexasc, that converts a 4-bit hexadecimal value to the corresponding 7-bit ASCII-code.

Я нарисовал блок-схему программы: enter image description here

И программа, которую я пробовал, состоит в следующем, но я подозреваю, что она не соответствует спецификации:

        .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 

Можете ли вы помочь мне разработать и решить это задание? Там достаточно времени, это не должно быть до тех пор, пока через месяц.

Update

Увидев здесь в комментарии, что блок-схема неверна, я внес необходимые изменения: enter image description here

Я также хочу обсудить, как этот алгоритм является правильным, который конвертирует между шестнадцатеричным и ASCII.

Update / edit

Вот полная программа.

.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

Ответы на вопрос(2)

Ваш ответ на вопрос