MMIX

MMIX
MMIX
디자이너도널드 크누스
비트64비트
소개했다1999
설계.RISC
부호화고정된.
분기상태 코드
엔디안니스큰.
열다.네, 로열티 무료입니다.
레지스터
32개의 특수 용도 레지스터
범용256

MMIX(em-mix로 발음)는 Donald Knuth가 설계64비트 RISC(Reduced Instruction Set Computing) 아키텍처John L이 많은 기여를 했습니다. 헤네시(MIPS 아키텍처 설계에 공헌)와 리처드 L.사이트(Alpha 아키텍처 설계자).크누스는 그렇게 말했다

MMIX는 프로그래밍의 기계 수준 측면을 설명하기 위한 컴퓨터입니다.저서 '컴퓨터 프로그래밍의 예술'에서는 1960년대식 기계인 '믹스'를 대체하고 있습니다.저는 MMIX의 기계어를 심플하고 우아하고 배우기 쉽게 디자인하려고 노력했습니다.동시에 저는 MMIX가 원칙적으로 구축되고 [1]시장에서 가장 빠른 범용 컴퓨터와 경쟁할 수 있도록 실제로 고성능을 달성하는 데 필요한 모든 복잡성을 포함시키는 데 신중했습니다."

Knuth는 1999년에 MMIX의 디자인을 시작했고 [2]2011년에 안정적인 버전의 디자인을 출시했다.프로세서의 번호는 "2009"로 Knuth는 이것이 다른 컴퓨터 아키텍처의 숫자의 산술 평균이며 로마 [3]숫자로는 "MMIX"라고 설명했습니다.

아키텍처

MMIX는 Big-endian 64비트 RISC(Reduced Instruction Set Computer)로, 256개의 64비트 범용 레지스터, 32비트 특수 레지스터, 고정 길이 32비트 명령64비트 가상 주소 공간을 갖추고 있습니다.MMIX 명령어세트는 256개의 opcode로 구성되어 있으며, 그 중 하나는 향후 [citation needed]확장을 위해 예약되어 있습니다.MMIX는 IEEE 754 부동소수점 번호를 사용합니다.

지침들

모든 명령에는 니모닉이 관련되어 있습니다.예를 들어 명령 #20(10진수 32)은 ADD와 관련되어 있습니다.대부분의 명령에는 기호 형식이 있습니다.OP X,Y,Z,어디에OP는 명령의 종류를 지정하고, X는 명령의 결과를 저장하기 위해 사용되는 레지스터를 지정하고, 나머지는 명령의 오퍼랜드를 지정합니다.각 필드의 너비는 8비트입니다.예를들면,ADD $0,$1,3"0달러를 1달러와 3달러의 합으로 설정"을 의미합니다.

대부분의 명령은 즉시 값을 취하거나 내용을 등록할 수 있습니다. 따라서 단일 명령 니모닉은 두 개의 연산 코드 중 하나에 해당합니다.

MMIX 프로그램은 일반적으로 MMIXAL 어셈블리 언어를 사용하여 구성됩니다.다음은 간단한 MMIXAL 프로그램으로 "Hello, world!"라는 문자열을 출력합니다.

        LOC #100% 처음에 프로그램 %의 주소를 0x100으로 설정합니다.Main GETA $255,string % 문자열 % 주소를 레지스터 255에 넣습니다.TRAP 0,Fputs,StdOut % % 레지스터 255가 가리키는 문자열을 표준 % 출력 파일에 씁니다.TRAP 0, Halt, 0% 프로세스 종료.string Byte "Hello, world!" , #a,0% 인쇄되는 문자열.#a는 %newline이고, 0은 % 문자열을 끝냅니다. 

레지스터

MMIX 칩에는 $0~$255로 지정된 256개의 직접 주소 지정 가능한 범용 아키텍처 레지스터와 32개의 특수 아키텍처 레지스터가 있습니다.특수 목적 레지스터는 GET 및 PUT 지침에 따라 액세스할 수 있습니다.rL과 rG라는 2개의 특수 레지스터는 어떤 일반 레지스터가 로컬이고 어떤 레지스터가 글로벌한지 결정합니다.모든 레지스터는 0달러부터...( [ rL ] - 1)은 로컬 레지스터이며 [4]레지스터의 내부 스택에 대한 창을 나타냅니다.[rL]에서 등록...( [ rG ] - 1)은 "평균 레지스터"이며, 작업에서 소스로 사용되는 경우 항상 0을 반환합니다.한계 레지스터를 작업 대상으로 사용하면 기계는 자동으로 rL을 증가시켜 해당 레지스터를 포함합니다.모든 레지스터 [rG]...$255는 글로벌 레지스터라고 불리며 레지스터 스택의 일부가 아닙니다.

로컬 레지스터 스택

로컬 레지스터 스택은 각 서브루틴에 $0 ~ $(rL - 1)로 지정된 자체 rL 로컬 레지스터를 제공합니다.서브루틴이 호출될 때마다 다수의 로컬 레지스터가 스택 아래로 푸시됩니다(창의 시작을 이동).호출된 서브루틴의 인수는 나머지 로컬레지스터에 남습니다서브루틴이 완료되면 이전에 푸시된 레지스터가 팝됩니다.내부 스택은 한정된 수의 레지스터만 포함할 수 있으므로 스택의 일부를 메모리에 [4]저장해야 할 수 있습니다.이것은 로컬 레지스터 스택의 어떤 부분이 메모리에 있고 어떤 부분이 아직 로컬 물리 레지스터에 있는지 기록하는 특수 레지스터 rO 및 rS를 사용하여 구현됩니다.레지스터 스택은 고속 서브루틴 링크를 제공합니다.

특수 레지스터

32개의 특수한 물리 아키텍처 레지스터는 다음과 같습니다.

  1. rB, 부트스트랩 레지스터(트립)
  2. 트립 시 rB ← $255 및 $255 ← rJ입니다.따라서 일반 레지스터에 rJ를 저장합니다.
  3. rD, 배당 레지스터
    부호 없는 정수 분할에서는 다른 오퍼랜드에 의해 분할되는 128비트 입력의 왼쪽 절반으로 사용됩니다.
  4. rE, 엡실론 레지스터
    엡실론과의 부동 비교에 사용됩니다.
  5. rH, 히멀트 레지스터
    부호 없는 정수 곱셈의 128비트 결과의 왼쪽 절반을 저장하는 데 사용됩니다.
  6. rJ, 리턴 점프 레지스터
    PUSHes 및 POP에 의해 PUSH에서 반환되는 다음 명령의 주소를 저장하기 위해 사용합니다.
  7. rM, 멀티플렉스 마스크 레지스터
    다중 명령에 의해 사용됩니다.
  8. rR, 나머지 레지스터
    정수 나눗셈의 나머지로 설정됩니다.
  9. rBB, 부트스트랩 레지스터(트랩)
    트랩 시 rBB ← $255 및 $255 ← rJ입니다.따라서 일반 레지스터에 rJ를 저장합니다.
  10. rC, 사이클 카운터
    사이클마다 증가합니다.
  11. rN, 시리얼 번호
    이 특정 MMIX 프로세서를 식별하는 상수.
  12. rO, 레지스터 스택오프셋
    레지스터 스택 구현에 사용됩니다.
  13. rS, 레지스터 스택포인터
    레지스터 스택 구현에 사용됩니다.
  14. rI, 인터벌카운터
    사이클마다 감소합니다.0일 때 인터럽트를 발생시킵니다.
  15. rT, 트랩주소 레지스터
    트립 벡터의 주소를 저장하는 데 사용됩니다.
  16. rTT, 다이내믹 트랩주소 레지스터
    트랩 벡터의 주소를 저장하기 위해 사용됩니다.
  17. rK, 인터럽트 마스크 레지스터
    특정 인터럽트를 이노블 또는 디세블로 하기 위해 사용됩니다.
  18. rQ, 인터럽트 요청 레지스터
    인터럽트 발생 시 기록하기 위해 사용됩니다.
  19. rU, 사용 카운터
    실행된 명령의 수를 유지하는 데 사용됩니다.
  20. rV, 가상 변환 레지스터
    가상 주소를 물리 주소로 변환하는 데 사용됩니다.세그먼트 크기 및 수, 페이지 테이블의 루트 위치 및 주소 공간 번호가 포함됩니다.
  21. rG, 글로벌 임계값 레지스터
    rG 이상의 숫자를 가진 모든 일반 레지스터 참조는 글로벌 레지스터를 참조합니다.
  22. rL, 로컬 임계값 레지스터
    rL보다 작은 숫자를 가진 모든 일반 레지스터 참조는 로컬 레지스터를 참조합니다.
  23. rA, 산술 상태 레지스터
    오버플로 및 0으로 나누기 등의 산술 예외 기록, 활성화 및 비활성화에 사용됩니다.
  24. rF, 고장 위치 레지스터
    오류를 일으킨 명령의 주소를 저장하는 데 사용됩니다.
  25. rP, 예측 레지스터
    조건부 스왑(CSWAP)에 의해 사용됩니다.
  26. rW, where-interrupt 레지스터(트립)
    트립 시 중단된 명령 뒤에 명령 주소를 저장하는 데 사용됩니다.
  27. rX, 실행 레지스터(트립)
    트립 시 중단된 명령을 저장하는 데 사용됩니다.
  28. rY, Y 오퍼랜드(트립)
    트립 시 중단된 명령의 Y 피연산자를 저장하는 데 사용됩니다.
  29. rZ, Z 오퍼랜드(트립)
    트립 시 중단된 명령의 Z 피연산자를 저장하는 데 사용됩니다.
  30. rWW, where-interrupted 레지스터(트랩)
    트랩할 때 중단된 명령 뒤에 명령 주소를 저장하는 데 사용됩니다.
  31. rXX, 실행 레지스터(트랩)
    트랩할 때 중단된 명령을 저장하는 데 사용됩니다.
  32. rYY, Y 오퍼랜드(트랩)
    트랩할 때 중단된 명령의 Y 피연산자를 저장하는 데 사용됩니다.
  33. rZZ, Z 오퍼랜드(트랩)
    트랩할 때 중단된 명령의 Z 피연산자를 저장하는 데 사용됩니다.

다른 거의 모든 CPU에서 실행되는 프로그램과 마찬가지로 MMIX 프로그램도 여러 가지 방법으로 중단될 수 있습니다.타이머 등의 외부 하드웨어는 프리엠프션인터럽트의 일반적인 소스입니다.가상 메모리 구현에 사용되는 메모리 보호 페이지 장애 예외 및 부동 소수점 예외 처리 등 많은 명령으로 인해 특별한 경우에 인터럽트가 발생합니다.MMIX에는 "트립"과 "트랩"의 2종류의 인터럽트가 있습니다."트립"과 "트랩"의 주요 차이점은 트랩은 운영 체제의 "트랩 핸들러" 프로그램으로 제어를 전송하지만(트립), 트립은 사용자 애플리케이션(트립)의 "트립 핸들러" 프로그램으로 제어를 전송한다는 것입니다.사용자는 다른 컴퓨터 시스템의 트랩과 마찬가지로 소프트웨어 인터럽트 명령 TRIP 및 TRAP을 사용하여 인터럽트 핸들러를 강제로 실행할 수도 있습니다.특히 사용자 프로그램에서 운영체제로의 시스템 호출은 TRAP [1]: 38 명령을 사용합니다.

하드웨어 구현

2015년 10월 현재 MMIX 명령 집합 아키텍처의 알려진 하드웨어 구현은 없습니다.그러나 fpgamix[5] 프로젝트는 Verilog에서 MMIX를 구현하므로 필드 프로그래머블 게이트 어레이를 사용하여 구현할 수 있습니다.

소프트웨어 도구

MMIX 명령 집합 아키텍처는 컴퓨터 아키텍처 연구 및 소프트웨어 개발을 위한 많은 소프트웨어 도구에 의해 지원됩니다.

시뮬레이터 및 어셈블러

  • MMIXware[6] – Donald Knuth의 MMIX-SIM Simple (동작) 시뮬레이터, MMIXAL 어셈블러, 테스트 스위트, 샘플 프로그램, 전체 문서 및 MMIX 아키텍처 (파이프라인) 시뮬레이터 ( )gzipped tar파일)을 클릭합니다.
  • MMIXX[7] – MIT 이론물리학 센터의 Andrew Pochinsky가 X11 기반의 그래픽 패키지입니다.위의 MMIXware 소스와 조합하면, 640×480 픽셀의 진정한 색상의 「가상 디스플레이」(UNIX/Linux 용)로 MMIX 가상 머신을 확장할 수 있습니다.

컴파일러

GNU 컴파일러 컬렉션에는 C/C++ 컴파일러용 MMIX 백엔드가 포함되어 있으며 한스-피터 닐슨에 의해 제공되었으며 2001년 후반부터 주요 GCC 배포의 일부입니다.2017년 11월 현재, GCC에 대한 MMIX 백엔드는 자원봉사자들에 의해 지속적으로 활발하게 개발 및 유지되고 있습니다.

  • Hans-Peter Nilsson의 [8]GCC + MMIX 도구 설치 지침.
  • §3.17.26.GNU GCC 버전 7.2.0[9] MMIX 옵션(GNU GCC 웹사이트).
  • § 9.28. GNU Binutils 버전 2.29부터 GNU의 어셈블러 백엔드(GNU Binutils Web 사이트)의 MMIX 의존[10] 기능.

위의 툴은 이론적으로 FreeBSD, Linux 또는 기타 유사한 운영체제 커널 전체를 MMIX 하드웨어에 컴파일, 빌드 및 부트스트랩하기 위해 사용할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Knuth, Donald E. (October 1999), MMIXware: A RISC Computer for the Third Millennium, Lecture Notes in Computer Science Tutorial, vol. 1750, Heidelberg: Springer-Verlag, ISBN 3-540-66938-8 (에라타)
  2. ^ "MMIX Home: A Message From Don Knuth". mmix.cs.hm.edu. Retrieved 2021-05-23.
  3. ^ Knuth, Donald (1999-02-09). MMIX: A RISC Computer for the New Millennium (offset 7:36). Stanford Lecture. Archived from the original on 2021-12-11. (Cray-1 + IBM 801 + RISC II + Clipper C300 + AMD 29k + Motorola 88k + IBM 601 + Intel i960 + Alpha 21164 + POWER2 + MIPS R4000 + Hitachi Super H4 + StrongARM 110 + SPARC64) / 14 = 28126 / 14 = 2009
  4. ^ a b Knuth, Donald (2005). "Section 1.4.2'". MMIX—A RISC Computer for the New Millennium. The Art of Computer Programming. Vol. 1, Fasc. 1. Addison Wesley. p. 58.
  5. ^ master (2008-08-24). "fpgammix". Repo.or.cz. Retrieved 2014-05-25.
  6. ^ "MMIXware". Cs-faculty.stanford.edu. Retrieved 2014-05-25.
  7. ^ "MMIXX". Malgil.com. 2002-03-06. Retrieved 2014-05-25.
  8. ^ GCC + MMIX 도구 설치 절차
  9. ^ https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/MMIX-Options.html © 3.17.26MMIX
  10. ^ "§9.28 MMIX Dependent Features". Sourceware.org. Retrieved 2017-11-20.
  • Donald E. Knuth(2005).The Art of Computer Programming Volume 1: MMIX A RISC Computer for the New Millennium.애디슨 웨슬리.ISBN 0-201-85392-2(에라타)
  • 마틴 루커트(2015).MMIX Supplement, The: The Art of Computer Programming Volume 1, 2, 3 by Donald E. Knuth.애디슨 웨슬리.ISBN 0-133-99231-4

외부 링크