SEGMENT 20176
DIFFERENTIAL CONVERTER
문제
- READ VALUES FROM IN.A AND IN.B
- WRITE IN.A - IN.B TO OUT.P
- WRITE IN.B - IN.A TO OUT.N
IN.A와IN.B로 들어오는 값들을 읽는다.IN.A - IN.B를 계산해서OUT.P로 내보낸다.IN.B - IN.A를 계산해서OUT.N로 내보낸다.

풀이 1
- 201 CYCLES / 5 NODES / 11 INSTR
A - B와 B - A의 절대값이 같다는 특징을 활용한다.
IN.A입력 노드는 값을 입력 받으면 바로IN.B입력 노드로 전달한다.IN.B입력 노드는 입력 값을 받아ACC에 저장한다.ACC에서IN.A에서 전달받은 값을 빼고, 아래 노드로 전달한다.
OUT.N출력 노드는 전달받은 값을ACC에 저장한다.ACC값을OUT.P출력 노드로 전달한다.OUT.N출력 노드는ACC의 값을 내보낸다.
OUT.P출력 노드는 전달받은 값을ACC로 저장한다.NEG명령을 사용해ACC값의 부호를 뒤집는다.ACC값을 내보낸다.

@0
#201 CYCLES
# 5 NODES
# 11 INSTR
@1
MOV UP, RIGHT
@2
MOV UP, ACC
SUB LEFT
MOV ACC, DOWN #B-A
@3
@4
@5
@6
MOV UP, DOWN
@7
@8
MOV RIGHT, ACC
NEG
MOV ACC, DOWN
@9
MOV UP, ACC
MOV ACC, LEFT
MOV ACC, DOWN
@10
풀이 2
- 240 CYCLES / 5 NODES / 10 INSTR
풀이 1보다 더 많은 사이클을 돌지만 1개의 명령을 줄인 방법이다.
풀이 1과 같은 논리를 사용하지만, 풀이 1과 2는 다음과 같은 차이가 있다.
- 풀이 1
OUT.N에서B - A의 값을 계산하고 내보냄.OUT.P에서는-1 * (B - A)의 값을 계산해 내보냄.
- 풀이 2
OUT.N에서B - A의 값을 계산하고 내보냄.OUT.N에서는-1 * (B - A)의 값을 계산해OUT.P노드로 전달함.OUT.P에서는 전달받은 값을 그대로 내보냄.
역할이 나뉘어있는 풀이 1이 더 적은 사이클을 사용한다(더 빠르다).
풀이 1은 더 적은 수의 명령을 사용하고 있을 뿐이다.

@0
#240 CYCLES
# 5 NODES
# 10 INSTR
@1
MOV UP, RIGHT
@2
MOV LEFT, ACC
SUB UP #A-B
MOV ACC, DOWN
@3
@4
@5
@6
MOV UP, DOWN #A-B
@7
@8
MOV RIGHT, DOWN
@9
MOV UP, ACC
MOV ACC, LEFT #B-A
NEG
MOV ACC, DOWN
@10