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.
AktualisierenNachdem 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 / bearbeitenHier 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