NAR 1
NAR 1NAR 1 또는 just NAR(Servan Nastavni Rachunar, en.Education Computer)는 네델지코 파레자노비치 베오그라드 대학 수학 교수(세르비아어로:Недељко Парезановић).그것은 어셈블리 언어와 컴퓨터 건축 과정에 사용되었다.
사양
NAR 1 프로세서는 5비트 주소 버스(주소 가능 메모리 32바이트)와 8비트 데이터 버스를 가지고 있다.기계 지침은 opcode를 지정하는 3개의 가장 중요한 비트와 파라미터 - 메모리 주소를 지정하는 5개의 최소 중요 비트가 포함된 단일 바이트였다.단일 8비트 축전지 레지스터를 사용할 수 있었고 플래그나 플래그 레지스터가 없었다.절대 어드레싱 모드만 사용할 수 있었고 다른 모든 것은 자체 수정 코드에 의해 달성되었다.
비록 이것이 이론적인 컴퓨터일 뿐이지만 다음과 같은 물리적 특성이 주어졌다.
- 메모리 사이클: 1μs
- 산술 연산(SABF) 주기: 0.9μs(900ns)
- 제어판은 전원 켜기/끄기, 메모리 데이터 입력 및 판독, 명령 카운터 입력 및 프로그램 실행 모드 또는 제어판 모드 선택을 용이하게 한다.
지침 코딩 및 설정
- SABF(001aaaa, sr.사베리 우 피크스놈 자레즈, 엔.Add Fixed point)는 주소 매개변수로 지정된 메모리 위치의 내용을 로드하여 축전지의 현재 값에 추가하고 그 결과를 축전지에 저장한다.
- PZAF(010xxxxx, sr.Promeni Zak Akumulatora u Fiksnom Zarezu, en.고정점에서 축전지의 기호 변경) 축전지의 고정점(정수 등) 값 무시
- AUM(011aaaa, sr.Akumulator U Memberiju, en.어큐뮬레이터 메모리에 저장) 주소 매개변수로 지정된 메모리 위치에 어큐뮬레이터의 콘텐츠를 저장
- MUA (100aaaa, sr.Membija U Akumulator, en.Memory In Acumulator)는 주소 매개변수에 의해 지정된 메모리 위치의 내용을 축전지에 로드한다.
- NES(101aaaa, sr.Negativni Scok, en.음극 점프)는 축전지의 현재 값이 음극일 경우 매개변수로 지정된 주소로 조건부 점프를 수행한다.
- ZAR(110xxxxx, sr.조스타비 라추나르, 엔.컴퓨터 중지)는 추가 처리를 중지한다.
두 가지 지침이 더 명시되지는 않았지만 일반적으로 시뮬레이터에 존재했으며 지침 코드 000aaaaa 및 111aaaaaa를 사용했다.
- BES(sr).베주슬로브니 스코크, 엔.무조건 점프) 매개변수로 지정된 주소로 무조건 점프 수행
- NUS(sr.Nula-Skok, en. Zero Jump)는 축전지의 현재 값이 0일 경우 매개변수로 지정된 주소로 조건부 점프를 수행한다.
예제 프로그램
8비트 정수 배열을 요약하는 샘플 프로그램:
00: 0 ; 입력: 0 또는 값 22, 출력: 결과 01..21: 0,0,0... ; 입력: 값 1..21 22: 무아 0 ; 프로그램 시작; 주소 0에서 축전지 로드 23: SABF 1 ; 주소 1에서 축전지에 값 추가 24: AUM 0 ; 0을(를) 처리할 축전지 저장 25: 무아 23 ; 주소 23(SABF)의 로드 지침 26: SABF 31 ; 어드레스 31(+1)에서 어큐뮬레이터로 값 추가 27: AUM 23 ; 23을 해결하기 위한 축전지 저장(SABF 명령 수정) 28: SABF 30 ; 어드레스 30의 값을 축전지에 추가 29: NES 22 ; 축전지 값이 음수일 경우 22로 다시 이동 30: 자르 10 ; 컴퓨터를 중지하십시오.인수는 이 바이트의 값을 -(SABF 22) = -54로 만든다. 31: 1 ; 각 반복에서 주소에 추가할 값
위 프로그램은 주소 22에서 실행될 경우 최대 22개의 8비트 값을 추가한다.
- 값 1-21은 위치 1-21에 저장됨
- 값 22는 상수 0이 아닌 위치 0에 저장되고 결과로 대체됨
NAR 1 프로그램은 일반적으로 자체 수정이다.다른 아키텍처들과는 달리, 이것은 '꼼수'가 아니다.메모리는 레지스터로 처리할 수 없기 때문에 메모리 데이터를 동적으로 조작할 수 있는 유일한 방법은 메모리 조작 지침을 수정하는 것이다.위의 예에는 메모리를 저장하기 위한 일반적인 트릭도 포함되어 있다. - 명령어(주소 30)는 다른 명령어(주소 28)에 의해 데이터로 재사용된다.
제어 창에서 초기 축전지 값을 제어할 수 있는 경우 23번째 값을 저장할 수 있다.위 프로그램은 약간만 수정하면 된다. 주소 23의 명령 SABF 1은 SABF 0으로 변경해야 하며 프로그램은 22부터가 아니라 해당 주소(23)에서 실행해야 한다.
다른 속임수로는 다음 예시와 같이 지침이 수정된 후 표지의 변경사항을 사용하는 것을 포함한다.
00..21: 0,0,0... ; 입력 값 22 대 1 22: 0 ; 입력: 0 또는 값 23, 출력: 결과 23: 무아 21 ; 프로그램 시작; 로드(다음) 값 24: SABF 22 ; 축전지에 22의 소계 추가 25: AUM 22 ; 22에 새 소계 저장 26: 무아 23 ; 명령 23을 축전지에 로드 27: SABF 31 ; 명령 감소 1 28: AUM 23 ; 업데이트 지침 29: NES 23 ; 지침이 여전히 음수일 경우 반복 30: 자르 ; 그렇지 않으면 컴퓨터를 중지하십시오. 31: -1 ; 27번지에서의 지시에 지속적으로 필요함
여기서 어드레스 23의 "MUA 21" 명령어에는 이진수 값 10010101이 있는데, 이 값은 두 개의 보완에서 부호화된 정수처럼 취급할 때 -107 소수점이다.26, 27 및 28에 대한 지시사항은 각 반복에서 이 값을 1씩 감소시킨다.이렇게 하면 주소를 지정하는 최소 5개의 비트가 수정되며 해당 명령이 MUA 0이 될 때까지 명령을 나타내는 3개의 비트는 건드리지 않는다(100000 이진수 = -128 소수, 음수).이 값이 1에 의해 감소하면 01111111 (+127 소수점)이 되어 더 이상 음수가 아니며 29에 점프의 경우 음의 명령이 통과하여 30에 "컴퓨터 중지"를 계속한다.
위와 유사하게, 이 프로그램은 주소 22를 입력과 출력 모두에 사용할 수 있는지 여부와 축전지의 초기 값을 입력으로 사용할 수 있는지에 따라 22에서 24 사이의 값을 추가할 수 있다(이 다음 프로그램은 주소 24에서 실행되어야 하고 23에서 지침은 MUA 22이어야 한다).
특정 구현이 알 수 없는 opcode에 부딪히거나 opcode "111aaaaa"로 추가적인 무조건 점프 명령을 실행하는 경우, 다음과 같이 그러한 동작을 사용할 수 있다.
00..22: 0,0,0... ; 입력 값 23 대 1 23: 0 ; 입력: 0 또는 값 24, 출력: 결과 24: 무아 22 ; 프로그램 시작; 로드(다음) 값 25: SABF 23 ; 축전지에 23의 소계 추가 26: AUM 23 ; 23에 새 소계 저장 27: 무아 24 ; 명령 24를 축전지에 로드 28: SABF 31 ; 명령 감소 1 29: AUM 24 ; 업데이트 지침 30: NES 24 ; 지침이 여전히 음수일 경우 반복 31: -1 ; BES 31 또는 잘못된 지침 & 상수 28
위와 같이 어드레스 31에서 발견되는 "-1"의 값은 컴퓨터를 정지시키는 잘못된 명령으로 취급하거나 같은 어드레스로 무조건 점프(BES 31)하여 결과에 영향을 미치지 않는 무한 루프(제어판을 사용하여 표시할 수 있다).
마지막으로, 컴퓨터가 메모리 끝에 도달하면 프로그램 실행을 중지한다고 결정되는지의 여부(주소 31, 주소 0으로 롤백하지 않음)에 따라, 위의 프로그램은 다음과 같이 "컴퓨터 중지" 지시의 필요성을 완전히 제거하여 한 값을 더 취하도록 재구성할 수 있다.
00..22: 0,0,0... ; 입력 값 23 대 1 23: 0 ; 입력: 0 또는 값 24, 출력: 결과 24: -1 ; 29시 지시에 계속 필요함 25: 무아 22 ; 프로그램 시작; 로드(다음) 값 26: SABF 23 ; 축전지에 23의 소계 추가 27: AUM 23 ; 23에 새 소계 저장 28: 무아 25 ; 명령 25를 축전지에 로드 29: SABF 24 ; 명령 감소 1 30: AUM 25 ; 업데이트 지침 31: NES 25 ; 지침이 여전히 음수일 경우 반복 ; -------------------------------기억의 끝
트리비아
- 단어 "nar"는 컴퓨터 모델을 가르치는 것을 의미한다.
- 많은 NAR 1 시뮬레이터가 만들어졌다.하나는 세르비아에서 과일이 자라면서 "슬지바"(자두)라는 이름이 붙었지만, "나르"는 그렇지 않다.
- 자주 주어진 일 중 하나는 가능한 많은 숫자를 추가하는 프로그램을 만드는 것이었습니다. 그 숫자들은 프로그램과 함께 32바이트 메모리에 저장되어있었죠.
- 일부 어셈블리 언어 프로토콜은 NAR1 훌릴 코드에서 파생된다.
참고 항목
네델지코 파레자노비치 박사(세르비아어)