Как конфертировать из 4-разрядного шестнадцатеричного в 7-разрядный ASCII?
Задача состоит в том, чтобы научиться программированию на ассемблере, написав подпрограмму, которая может конвертировать между 4-битным шестнадцатеричным и 7-битным ASCII. Сначала я понятия не имел, но после некоторого исследования я мог приложить усилия и нарисовать блок-схему и сделать программу, но это не совсем правильно, поэтому я прошу вашего руководства, чтобы помочь мне решить эту проблему.
Фактический текст назначения таков:
HA 3.1. Draw a flow-chart for a subroutine to convert a 4-bit hexadecimal value to the corresponding 7-bit ASCII-code. See the full specification for hexasc below. Example: binary 0010 (hexadecimal digit 2) is converted to 011 0010 (ASCII-code for '2'). Another example: binary 1011 (hexadecimal digit B) is converted to 100 0010 (ASCII-code for 'B') Make sure that your subroutine is documented according to our requirements.
HA 3.2. Using the labwork project in the Nios II IDE, create a new file called hexasc.s
HA 3.3. In the file hexasc.s, write a subroutine called hexasc, that converts a 4-bit hexadecimal value to the corresponding 7-bit ASCII-code.
Я нарисовал блок-схему программы:
И программа, которую я пробовал, состоит в следующем, но я подозреваю, что она не соответствует спецификации:
.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
Можете ли вы помочь мне разработать и решить это задание? Там достаточно времени, это не должно быть до тех пор, пока через месяц.
UpdateУвидев здесь в комментарии, что блок-схема неверна, я внес необходимые изменения:
Я также хочу обсудить, как этот алгоритм является правильным, который конвертирует между шестнадцатеричным и ASCII.
Update / editВот полная программа.
.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