Assembly 从二进制到灰色的转换在汇编中起作用,但反之亦然

Assembly 从二进制到灰色的转换在汇编中起作用,但反之亦然,assembly,gray-code,picoblaze,Assembly,Gray Code,Picoblaze,我正试图建立一个程序,为Picobaze将转换从格雷码到二进制,反之亦然。以下是我迄今为止所做的: 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 w

我正试图建立一个程序,为Picobaze将转换从格雷码到二进制,反之亦然。以下是我迄今为止所做的:

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
但是,我得到了输出:

3
2
3
5

这是怎么回事?我正在测试我的程序。

好的,这似乎有效:

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

您使用什么输入进行测试?你得到了什么实际结果?这是程序的重要部分。@PeterCordes好的,我已经包括了一个示例。
3^(3