Como converter de hexadecimal de 4 bits para ASCII de 7 bits?
O objetivo é aprender programação assembly escrevendo uma sub-rotina que pode converter entre 4 bits hexadecimais e 7 bits ASCII. No começo eu não tinha ideia, mas depois de alguma pesquisa eu poderia fazer e esforço e desenhar um fluxograma e fazer um programa, mas não é totalmente correto, então eu estou pedindo sua orientação para me ajudar a resolver isso.
O texto da atribuição real é este:
HA 3.1. Desenhe um fluxograma para uma sub-rotina para converter um valor hexadecimal de 4 bits no código ASCII de 7 bits correspondente. Veja a especificação completa para hexasc abaixo. Exemplo: o binário 0010 (dígito hexadecimal 2) é convertido em 011 0010 (código ASCII para '2'). Outro exemplo: o binário 1011 (dígito hexadecimal B) é convertido em 100 0010 (código ASCII para 'B') Certifique-se de que sua sub-rotina está documentada de acordo com nossos requisitos.
HA 3.2. Usando o projeto de laboratório no IDE do Nios II, crie um novo arquivo chamado hexasc.s
HA 3.3. No arquivo hexasc.s, escreva uma sub-rotina chamada hexasc, que converte um valor hexadecimal de 4 bits no código ASCII de 7 bits correspondente.
Eu desenhei um fluxograma para o programa:
E o programa que eu tentei é isso, mas eu suspeito que não está de acordo com as especificações:
.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
Você pode me ajudar a desenvolver e resolver essa tarefa? Há muito tempo, não é devido até daqui a um mês.
AtualizarDepois de ver aqui em um comentário que o fluxograma estava incorreto, fiz os ajustes necessários:
Eu também quero discutir como este algoritmo está correto que converte entre hexadecimal e ASCII.
Atualizar / editarAqui está o 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