¿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.
ActualizarDespué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 / editarAquí 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