NAR 1

NAR 1

NAR 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 훌릴 코드에서 파생된다.

참고 항목

네델지코 파레자노비치 박사(세르비아어)