Wie konvertiert man von 4-Bit Hexadezimal zu 7-Bit ASCII?

Die Aufgabe besteht darin, die Assemblerprogrammierung zu erlernen, indem eine Unterroutine geschrieben wird, die zwischen 4-Bit-Hexadezimal- und 7-Bit-ASCII konvertieren kann. Anfangs hatte ich keine Ahnung, aber nach einigen Recherchen konnte ich ein Flussdiagramm erstellen und anstrengen und zeichnen und ein Programm erstellen, aber es ist nicht ganz korrekt. Deshalb bitte ich Sie um Ihre Anleitung, um mir bei der Lösung dieses Problems zu helfen.

Der eigentliche Zuordnungstext lautet:

HA 3.1. Zeichnen Sie ein Flussdiagramm für ein Unterprogramm, um einen 4-Bit-Hexadezimalwert in den entsprechenden 7-Bit-ASCII-Code zu konvertieren. Siehe die vollständige Spezifikation für hexasc unten. Beispiel: Binär 0010 (Hexadezimalziffer 2) wird in 011 0010 (ASCII-Code für '2') konvertiert. Ein weiteres Beispiel: Binär 1011 (Hexadezimalzahl B) wird in 100 0010 (ASCII-Code für 'B') konvertiert. Stellen Sie sicher, dass Ihr Unterprogramm gemäß unseren Anforderungen dokumentiert ist.

HA 3.2. Erstellen Sie mithilfe des Laborprojekts in der Nios II-IDE eine neue Datei mit dem Namen hexasc.s

HA 3.3. Schreiben Sie in die Datei hexasc.s eine Subroutine namens hexasc, die einen 4-Bit-Hexadezimalwert in den entsprechenden 7-Bit-ASCII-Code konvertiert.

Ich habe ein Flussdiagramm für das Programm gezeichnet:

Und das Programm, das ich ausprobiert habe, ist das Folgende, aber ich vermute, dass es nicht der Spezifikation entspricht:

        .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 

Können Sie mir helfen, diese Aufgabe zu entwickeln und zu lösen? Es gibt viel Zeit, es ist erst in einem Monat fällig.

Aktualisieren

Nachdem ich hier in einem Kommentar gesehen habe, dass das Flussdiagramm falsch war, habe ich die notwendigen Anpassungen vorgenommen:

Ich möchte auch diskutieren, wie dieser Algorithmus korrekt ist, der zwischen hexadezimal und ASCII konvertiert.

Aktualisieren / bearbeiten

Hier ist das komplette Programm.

.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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage