믹스

MIX
믹스
디자이너도널드 크누스
비트31비트
소개했다1968
디자인축전지 기계
유형가상의
인코딩고정된
분기상태 코드 및 레지스터 테스트
엔디안니스
개방하다네, 그리고 로열티도 무료 입니다.
레지스터
합계 9

MIX도널드 크누스의 모노그래프인 컴퓨터 프로그래밍(TAOCP)에 사용된 가상의 컴퓨터다.MIX의 모델번호는 1009로, 저자가 중요하게 여기는 동시대 상업용 기계의 모델 번호와 이름을 조합해 도출한 것이다.또한 로마 숫자로 읽히는 'MIX'는 1009이다.

1960년대 MIX는 이후 새로운 (또한 가상적인) 컴퓨터 아키텍처인 MMIX로 대체되어, TAOCP의 다음 판에 통합되었다.

MIX 아키텍처와 MMIX 아키텍처 모두를 위한 소프트웨어 구현은 Knuth에 의해 개발되어 자유롭게 이용할 수 있게 되었다(각각 "MIXware"와 "MMIXware"라는 명칭).Knuth의 MIX/MMIX 에뮬레이터의 여러 파생 모델도 존재한다.GNU MDK는 그러한 소프트웨어 패키지 중 하나이다. 그것은 무료이며 다양한 플랫폼에서 실행된다.

그들의 교육 목적은 존 L과 상당히 비슷하다. 헤네시데이비드 A. 컴퓨터 조직 설계 - 하드웨어 소프트웨어 인터페이스에서 PattersonDLX 아키텍처.

건축

MIX는 하이브리드 2진수 10진수 컴퓨터다.이진수로 프로그래밍할 때, 각 바이트는 6비트(0에서 63까지의 값 범위)를 가진다.십진수에서 각 바이트는 2개의 소수 자릿수(0에서 99까지의 값 범위)를 갖는다.바이트는 5바이트의 단어와 기호로 묶는다.MIX용으로 작성된 대부분의 프로그램은 단일 바이트에 63보다 큰 값을 저장하려고 하지 않는 한 이진수 또는 십진수로 작동한다.

단어 범위는 이진 모드에서 -1,073,741,823(포함) ~ 1,073,741,823(포함)이며, 소수 모드에서는 -9,999,999,999(포함)이다.MIX 아키텍처에서 정수의 부호 및 규모 표현은 "-0"과 "+0"을 구별한다.이는 현대의 컴퓨터와는 대조적인데, 정수의 양에 대한 두 가지 복합 표현은 0에 대한 단일 표현을 포함하지만, 주어진 비트 수에 대한 범위는 표현 가능한 양의 정수보다 하나의 음의 정수를 더 포함한다.

MIX 레지스터
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (비트 위치)
레지스터
± A1 A2 A3 A4 A5 rA, 축전기
± X1 X2 X3 X4 X5 rX, 확장
색인 레지스터
± I1.4 I1.5 rI1, 지수 1
± I2.4 I2.5 rI2, 지수 2
± I3.4 I3.5 RI3, 지수 3
± I4.4 I4.5 RI4, 지수 4
± I5.4 I5.5 rI5, 지수 5
± I6.4 I6.5 RI6, 지수 6
프로그램 카운터
J4 J5 RJ, 점프
조건 코드 플래그
O 오버플로 플래그
<=> 비교 플래그

레지스터

MIX에는 9개의 레지스터가 있다.

  • rA: 축전기(전체 단어, 5바이트 및 기호).
  • rX: 확장(전체 단어, 5바이트 및 기호).
  • rI1, rI2, rI3, rI4, rI5, rI6: 인덱스 레지스터(2바이트 및 기호)
  • rJ: 점프 주소(2바이트, 항상 양).

바이트는 최소 6비트로 가정한다.대부분의 지침은 양식의 접미사(첫 번째:last)를 사용하여 레지스터의 "필드"(바이트) 중 어떤 을 변경할 것인지 지정할 수 있다.제로스 필드는 하나의 비트 기호다.

MIX는 이전 연산이 오버플로되었는지 여부도 기록하며, 1-트리트 비교 표시기(보다 작거나 같거나 더 큼)가 있다.

메모리 및 입력/출력

MIX 기계는 0에서 3999까지 주소가 지정된 4000개의 단어(각각 5바이트와 기호가 있음)의 저장 공간을 가지고 있다.다양한 입력 및 출력 장치도 포함된다.

  • 테이프 장치(장치 0...7)
  • 디스크 또는 드럼 유닛(장치 8...15).
  • 카드 판독기(장치 16).
  • 카드 펀치(장치 17).
  • 라인 프린터(장치 18).
  • 타이프라이터 단자(장치 19).
  • 종이 테이프(장치 20)

지침들

메모리의 각 기계 명령은 한 단어를 차지하며, 4개의 부분으로 구성된다: 읽거나 쓸 메모리의 주소(2바이트와 단어의 기호), 주소에 추가할 색인 사양(1바이트, 사용할 rI 색인을 기술함), 레지스터 또는 메모리 위치의 어떤 부분을 읽을 것인지를 지정하는 수정(1바이트)또는 변경된 작업 코드(1바이트)모든 작동 코드는 연관된 니모닉을 가지고 있다.

30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
± 주소 색인 수정 작전

MIX 프로그램은 MIX가 자동 서브루틴 리턴 스택이 없기 때문에 특히 서브루틴에서 복귀하기 위해 자주 자체 수정 코드를 사용한다.자체 수정 코드는 수정 바이트에 의해 촉진되어 프로그램이 대상 명령의 주소 부분에 데이터를 저장할 수 있게 되어 나머지 명령어는 수정되지 않은 채로 남게 된다.

MIX 프로그램은 일반적으로 MIXAL 어셈블리 언어를 사용하여 구성된다. 예를 들어 Hello 월드 프로그램 목록 페이지를 참조하십시오.

LDA ADDR,i(0:5) rA := memory[ADDR + rIi];
LDX ADDR,i(0:5) rX := memory[ADDR + rIi];
LD? ADDR,i(0:5) rI? := memory[ADDR + rIi];
LDAN ADDR,i(0:5) rA := - memory[ADDR + rIi];
LDXN ADDR,i(0:5) rX := - memory[ADDR + rIi];
LD?N ADDR,i(0:5) rI? := - memory[ADDR + rIi];
STA ADDR,i(0:5) memory[ADDR + rIi] := rA;
STX ADDR,i(0:5) memory[ADDR + rIi] := rX;
ST? ADDR,i(0:5) memory[ADDR + rIi] := rI?;
STJ ADDR,i(0:5) memory[ADDR + rIi] := rJ;
STZ ADDR,i(0:5) memory[ADDR + rIi] := 0;
ADD ADDR,i(0:5) rA := rA + memory[ADDR + rIi];
SUB ADDR,i(0:5) rA := rA - memory[ADDR + rIi];
MUL ADDR,i(0:5) (rA,rX) := rA * memory[ADDR + rIi];
DIV ADDR,i(0:5)
rA := 인트로( (rA,RX) / 기억력[ADDR + r] ); RX := (rA,RX) % 기억력[ADDR + r]; 
ENTA ADDR,i rA := ADDR + rIi;
ENTX ADDR,i rX := ADDR + rIi;
ENT? ADDR,i rI? := ADDR + rIi;
ENNA ADDR,i rA := - ADDR - rIi;
ENNX ADDR,i rX := - ADDR - rIi;
ENN? ADDR,i rI? := - ADDR - rIi;
INCA ADDR,i rA := rA + ADDR + rIi;
INCX ADDR,i rX := rX + ADDR + rIi;
INC? ADDR,i rI? := rI? + ADDR + rIi;
DECA ADDR,i rA := rA - ADDR - rIi;
DECX ADDR,i rX := rX - ADDR - rIi;
DEC? ADDR,i rI? := rI? - ADDR - rIi;
CMPA ADDR,i(0:5) 비교하다rA와 함께memory[ADDR + rIi];
CMPX ADDR,i(0:5) 비교하다rX와 함께memory[ADDR + rIi];
CMP? ADDR,i(0:5) 비교하다rI?와 함께memory[ADDR + rIi];
JMP ADDR,i
RJ := 주소를 쓰다  다음에 교육; 에 가다 ADDR + r; 
JSJ ADDR,i goto ADDR + rIi;
JOV ADDR,i
만일 (넘치다) 그때    넘치다 := 거짓의;     에 가다 ADDR + r; 
JNOV ADDR,i
만일 (아니요. 넘치다) 그때     에 가다 ADDR + r; 다른      넘치다 := 거짓의; 
JL, JE, JG ADDR,i
JGE, JNE, JLE ADDR,i
만일 (덜하다, 대등하다, 보다 큰) 그때 에 가다 ADDR + r; 만일 (아니요. 덜하다, 불평등한, 아니요. 보다 큰) 그때 에 가다 ADDR + r; 
JAN/JAZ/JAP ADDR,i
JANN/JANZ/JANP ADDR,i
만일 (rA<0 또는 rA==0 또는 rA>0) 그때 에 가다 ADDR + r; 만일 (rA>=0 또는 rA!=0 또는 rA<=0) 그때 에 가다 ADDR + r; 
JXN/JXZ/JXP ADDR,i
JXNN/JXNZ/JXNP ADDR,i
(rX<0 또는 rX=0 또는 rX>0) 다음에 ADDR + rIi를, (rX>=0 또는 rX!=0 또는 rX<0)에 이어 ADDR + rI를 얻는다.
J?N/J?Z/J?P ADDR,i
J?NN/J?NZ/J?NP ADDR,i
만약(rI?<0 또는 rI?==0 또는 rI?>0) 그런 다음 ADDR + rIi로 (rI?>=0 또는 rI?!=0 또는 rI?(=0) 그런 다음, ADDR + rIi로 gotto;
MOVE ADDR,i(F)
을 위해 (n = 0; n < F; n++, ri1++)     기억력[ri1] := 기억력[ADDR+r+n]; 
SLA/SRA ADDR,i
SLAX/SRAX ADDR,i
SLC/SRC ADDR,i
교대시키다rA옆[옆]에ADDR+rIi바이트
교대시키다(rA,rX)옆[옆]에ADDR+rIi바이트
회전시키다(rA,rX)옆[옆]에ADDR+rIi바이트
NOP 아무것도 하지 않다;
HLT 실행을 중지한다.
IN ADDR,i(F) 입력 단위에서 한 블록으로 읽다.F
memory[ADDR + rIi]이후,
OUT ADDR,i(F) 한 블록을 유닛으로 출력하다F
로부터memory[ADDR + rIi]이후,
IOC ADDR,i(F) 제어 명령을 I/O 장치에 전송하다.F;
JRED ADDR,i(F) if (i/o unit F is ready) then goto ADDR + rIi;
JBUS ADDR,i(F) if (i/o unit F is busy) then goto ADDR + rIi;
NUM rA := numerical value of characters in (rA,rX);
CHAR (rA,rX) := character codes representing value of rA;

구현

MIX는 다음을 통해 소프트웨어로 구현되었다.

ICE40을 위해 MIX의 구현이 생성되었다.2021년 HX8K FPGA 보드.[3]

참고 항목

참조

  1. ^ mix(1) – 9 앞쪽 수동 페이지
  2. ^ 하드웨어::시뮬레이터:CPAN혼합모듈
  3. ^ "Michael Schröder / mix-fgpa". GitLab.

외부 링크