Преобразование из двоичного в серый работает в сборке, но не наоборот
Я пытаюсь создать программу для PicoBlaze, которая будет переводить из кода Грея в двоичный и наоборот. Вот что я сделал до сих пор:
address 0
start: ;Infinite loop...
;Converting from binary to gray...
constant binary_input,0
constant gray_output,0
input s0,binary_input
load s1,s0
sr0 s1
xor s1,s0
output s1,gray_output ;Seems to work.
;Converting from gray to binary...
constant gray_input,1
constant binary_output,1
input s0,gray_input
load s1,s0
sl0 s1
xor s1,s0
output s1,binary_output ;Does not work.
jump start
Итак, преобразование из двоичного в серый, похоже, работает. Однако преобразование из серого в двоичный не работает. Например, для ввода:
2
3
Ожидаю на выходе:
3
2
Однако я получаю вывод:
3
5
Что здесь происходит? Я тестирую свою программу в PicoBlaze Simulator.
1 ответ
Решение
Хорошо, похоже, это работает:
address 0
start: ;Infinite loop...
;Converting from binary to gray...
constant binary_input,0
constant gray_output,0
input s0,binary_input
load s1,s0
sr0 s1
xor s1,s0
output s1,gray_output
;Converting from gray to binary...
constant gray_input,1
constant binary_output,1
input s0,gray_input
load s1,s0
convert_to_binary_loop:
sr0 s1
xor s0,s1
compare s1,0
jump nz,convert_to_binary_loop
output s0,binary_output
jump start