믹스
MIX이 글은 검증을 위해 인용구가 추가로 필요하다. "MIX – · · 책 · · (2012년 8월) (이 템플릿 하는 |
디자이너 | 도널드 크누스 |
---|---|
비트 | 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. 컴퓨터 조직 및 설계 - 하드웨어 소프트웨어 인터페이스에서 Patterson의 DLX 아키텍처.
건축
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 레지스터 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
레지스터
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]
참고 항목
참조
외부 링크
- MMIX 2009: Third Millennium Knuth의 공식 MIX 페이지
- MMIX 뉴스 크누스의 공식 MIX 뉴스
- MIX: Knuth의 1970년 공식 MIX 책자인 Internet Archive의 Open Library에 있는 일반적인 컴퓨터와 조립 언어의 디자인, 표지에 Tom Mix가 있다.
- MMIXware: Third Millennium Knuth의 공식 MIX 북을 위한 RISC 컴퓨터
- 컬리의 믹스-MMIX/MIXAL-MIXAL