안 쓰던 블로그
TIS-100 UNCONDITIONAL 도전과제 공략 본문
UNCONDITIONAL
Solve SIGNAL COMPARATOR without using the JGZ, JLZ, JEZ, or JNZ instructions.
문제는 값을 하나 받아서 0보다 크면 G로 0이면 E로 0보다 작으면 L로 OUT시킨다
OUT값이 1이 아니면 0을 출력해야 한다
원래 풀이
근데 여기서 0을 비교하는 조건 GZ, JLZ, JEZ, JNZ을 쓰지 않는 게 도전과제 조건이다
그럼 뭐 써야 하냐 JRO는 조건에 없으니 JRO를 쓰면 된다
JRO n은 명령어와 n줄 떨어진 행으로 이동한다
JRO 0은 모듈 실행 정지
JRO -1은 이전 행 실행
JRO 2는 다음 행 무시하고 다다음 행 실행
JRO ACC는 ACC만큼 떨어진 행 실행
처음에 입력을 받는데 5+입력값으로 받는다
왜 그렇게 하냐면 JRO의 특징 때문에 음수를 받으면 위의 명령으로 올라가고 그래야 하는데
그런 것보다는 무조건 양수로 만들어서 줄 수를 조절하는 방법이 편하기 때문이다
5줄을 띄운 이유는 그 사이에 명령어를 실행할 줄이 좀 필요하니까 임의로 정했다
첫 번째 노드에서는 1보다 크면 1을 출력해야 한다
1보다 큰 수가 들어오면 적어도 6줄 점프한다
근데 입력값이 -2, -1, 0, 1, 2밖에 없으므로 +5하면 6과 7은 1출력하고 나머지에 0, 0을 보내야 한다
처음에 1이 들어왔다면 6이고, NOP에 걸리니까 MOV 1, DOWN을 하게 된다
2가 들어왔다고 하면 7이 오니까 바로 MOV 1, DOWN을 한다
이 경우 JMP LOOP로 점프하기 때문에 0 출력하지 않는다
처음에 5가 들어왔다면 입력값이 0이라는 말이니까, JMP ZERO해서 오른쪽에 1을 넘긴다
자기 자신은 0을 출력한다
처음에 -1이나 -2가 들어오면 3, 4가 이곳에 넘어오게 되고, 3이나 4나 무조건 JMP GO하게 된다
GO는 오른쪽에 2을 보내고 자기는 0을 출력한다
입력값에 따라 1, 2, 3이 두 번째 노드로 넘어 온다
6이나 7 같은 경우 3이 넘어오니까 바로 3줄 넘어가서 JMP DNO하게 되고, DNO에서 오른쪽에 3을 넘겨주고 자신은 0을 출력한다
처음에 5가 들어왔다면 1이 넘어오고, JMP EZ하게 된다. EZ는 오른쪽에 3을 보내고 자기는 1을 출력한다
바로 LOOP를 돌게 되니까 0을 출력하지 않는다
처음에 3, 4가 입력값이면 2가 넘어오게 되고, LZ로 점프해서 오른쪽에 1을 보내고 자기는 FIN으로 넘어가서 0을 출력한다
입력값에 따라 1, 3 중에 넘어 오는 마지막 노드이다
양수 6이나 7 같은 경우는 3이 넘어 왔으니까 3줄 점프해서 바로 0출력한다
5가 들어오면 3이 넘어오고, 똑같이 0 출력하고 끝난다
3, 4가 들어오면 1이 넘어오니까 MOV 1, DOWN으로 1 출력하고 바로 LOOP 시작점으로 점프한다
전체 코드
즐거운 TIS
'취미 > TIS-100 공략' 카테고리의 다른 글
TIS-100 INTERRUPT HANDLER (SEGMENT 33762) 공략 (0) | 2020.12.13 |
---|---|
TIS-100 SIGNAL PATTERN DETECTOR (SEGMENT 40196)공략 (0) | 2020.12.13 |
TIS-100 NO_MEMORY 도전 과제 공략 (0) | 2020.06.29 |
TIS-100 SEQUENCE REVERSER (SEGMENT 42656) 공략 (0) | 2020.06.29 |
TIS-100 SEQUENCE GENERATOR (SEGMENT 30647) 공략 (0) | 2020.06.28 |