任务是通过编写一个可以在 4 位十六进制和 7 位 ASCII 之间转换的子程序来学习汇编编程。起初我不知道,但经过一些研究,我可以做出努力并绘制流程图并制作程序,但这并不完全正确,所以我请求您的指导来帮助我解决这个问题。
实际的作业文本是这样的:
哈 3.1。绘制一个子程序的流程图,以将 4 位十六进制值转换为相应的 7 位 ASCII 码。请参阅下面的 hexasc 的完整规范。示例:二进制 0010(十六进制数字 2)转换为 011 0010(“2”的 ASCII 码)。另一个例子:二进制 1011(十六进制数字 B)转换为 100 0010('B' 的 ASCII 码) 确保根据我们的要求记录您的子程序。
哈 3.2。使用 Nios II IDE 中的 labwork 项目,创建一个名为 hexasc.s 的新文件
哈 3.3。在文件 hexasc.s 中,编写一个名为 hexasc 的子程序,将 4 位十六进制值转换为相应的 7 位 ASCII 码。
我为程序画了一个流程图:
我尝试过的程序是这样的,但我怀疑它不符合规范:
.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
你能帮我开发和解决这个任务吗?时间很充裕,一个月后才到期。
更新
在此处看到流程图不正确的评论后,我进行了必要的调整:
我还想讨论在十六进制和 ASCII 之间转换的算法是如何正确的。
更新/编辑
这是完整的程序。
.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