리틀 컴퓨터 3

Little Computer 3

Little Computer 3 또는 LC-3는 컴퓨터 교육용 프로그래밍 언어의 일종인 어셈블리 언어입니다.

이것은 비교적 단순한 명령어 세트를 특징으로 하지만, 적당히 복잡한 어셈블리 프로그램을 작성하는 데 사용할 수 있으며, C 컴파일러의 실행 가능한 타깃입니다.이 언어는 x86 어셈블리보다 덜 복잡하지만 더 복잡한 언어의 것과 유사한 많은 기능을 가지고 있습니다.이러한 기능들은 초기 교육에 유용하기 때문에 컴퓨터 공학 및 컴퓨터 공학 학생들에게 프로그래밍과 컴퓨터 아키텍처의 기초를 가르치는 데 가장 많이 사용됩니다.

LC-3는 오스틴에 있는 텍사스 대학의 예일 N. 패트와 Urbana-Champaign에 있는 일리노이 대학Sanjay J. 파텔의해 개발되었습니다.명령어 세트의 사양, LC-3의 전체적인 아키텍처 및 하드웨어 구현에 대한 자세한 내용은 교과서 [1]제2판에서 확인할 수 있습니다.LC-3와 패트 앤 파텔의 책에 기초한 강좌는 많은 컴퓨터 공학 및 컴퓨터 과학 학과에서 제공됩니다.

아키텍처 사양

LC-3에서는 레지스터에 16비트의 워드사이즈를 지정하고 2개의16 로케이션주소 공간을 가진 16비트 주소 지정 가능 메모리를 사용합니다.레지스터 파일에는 8개의 레지스터가 있으며 번호로 R0 ~ R7이라고 합니다.모든 레지스터는 레지스터 파일에 쓸 수 있는 명령어 중 하나에 의해 자유롭게 사용될 수 있다는 점에서 범용이지만, 일부 컨텍스트(C 코드에서 LC-3 어셈블리로 변환 등)에서는 레지스터 중 일부가 특수한 목적으로 사용됩니다.

명령어 폭은 16비트이며 4비트 opcode가 있습니다.명령어 세트에서는 16개의 opcode 중 15개의 명령어가 정의되지만 일부 명령어에는 여러 동작 모드가 있습니다.개별 명령의 실행은 제어 ROM 및 마이크로시퀀싱 유닛을 갖춘 상태 기계에 의해 규제된다.

이 아키텍처는 키보드와 모니터를 사용하여 입출력 조절을 지원합니다.이 지원은 메모리 매핑 I/O 추상화를 통해 제공됩니다.시뮬레이션에서 이들 레지스터는 직접 접근할 수 있으며 아키텍처 사양은 그 내용을 기술한다.TRAP 명령 및 기본 운영 체제를 사용하여 보다 높은 수준의 I/O를 지원합니다.operating system에서는, 키보드의 문자를 읽어 에코 하는 기능, 모니터에 개개의 문자를 인쇄하는 기능, 포장된 형식과 개봉되지 않은 형식의 문자열 전체를 인쇄하는 기능, 및 머신을 정지하는 기능이 있습니다.

LC-3의 모든 데이터는 2의 보완 표현으로 저장된다고 가정합니다. 부호 없는 산술은 별도로 지원되지 않습니다.I/O 디바이스는 ASCII 문자로 동작합니다.LC-3에서는 부동소수점 번호는 네이티브로 지원되지 않습니다.

Patt 및 Patel 텍스트에서 제시된 하드웨어 구현은 파이프라인 또는 최적화되어 있지 않지만 컴퓨터 아키텍처에서 보다 고도의 개념을 사용하여 신속하게 구현할 수 있습니다.

명령 집합

LC-3 명령어세트는 15종류의 명령을 구현하고 16종류의 opcode는 나중에 사용하기 위해 예약되어 있습니다.이 아키텍처는 로드 스토어 아키텍처입니다.메모리의 값을 레지스터 파일로 가져와야 조작할 수 있습니다.

사용 가능한 산술 명령에는 덧셈, 비트 단위 AND 및 비트 단위 NOT가 있으며, 이들 중 처음 2개는 레지스터와 부호 확장 즉시값을 모두 오퍼랜드로 사용할 수 있습니다.이러한 연산은 감산(값을 부정함) 및 비트 왼쪽 이동(값에 2를 곱하는 더하기 명령을 사용함)을 포함한 많은 기본 산술 연산을 구현하기에 충분합니다.또, NOT 와 AND 의 조합은 논리적으로 완전하기 때문에, LC-3 는 임의의 비트 단위의 논리 함수를 실장할 수도 있습니다.

메모리 액세스는 프로그램 카운터(PC) 또는 레지스터 파일의 레지스터의 현재 값에 근거해 주소를 계산해 실시할 수 있습니다.또, LC-3는 간접적인 부하와 격납을 제공해, 메모리내의 데이터를 격납하는 주소로서 데이터를 격납합니다.메모리 내의 값을 레지스터 파일로 가져와야 산술 또는 논리 연산의 일부로 사용할 수 있습니다.

LC-3에서는 조건부 및 무조건 제어 흐름지시가 모두 제공됩니다.조건부 분기는 레지스터 파일에 기록된 마지막 데이터 조각의 산술 부호(음수, 0 또는 양수)를 기반으로 합니다.무조건 브랜치는 레지스터 값 또는 PC 상대 오프셋에 의해 주어진 위치로 실행을 이동할 수 있습니다.프로그램 카운터의 값을 변경하기 전에 서브루틴을 호출하는 코드의 주소를 레지스터에 저장함으로써 3개의 명령(JSR, JSR 및 TRAP)이 서브루틴 호출 개념을 지원합니다.LC-3은 두 값의 직접 산술 비교를 지원하지 않습니다.2개의 레지스터 값의 차이를 계산하려면 1개의 레지스터 값의 부정한 등가성을 찾은 후 2번째 레지스터의 정값에 부정한 숫자를 더해야 한다.두 레지스터의 차이는 사용자가 사용할 수 있는 8개의 레지스터 중 하나에 저장됩니다.

LC-3 명령어 세트에는 전용 포트 매핑 I/O 명령이 남아 있지 않기 때문에 하드웨어 구현에서는 일반적으로 메모리 맵의 일부를 메모리 매핑 I/[2]O용으로 예약합니다.

프로그래밍 언어 지원

LC-3는 물리 칩에 실장되어 있지 않지만 Linux/Unix, Mac OS X 및 Windows 환경에서 시뮬레이션에 사용할 수 있습니다.시뮬레이션 도구에는 라벨을 사용한 컴퓨터 오프셋 계산 및 어셈블리 코드 블록에 상수, 문자열 및 빈 메모리 위치를 삽입할 수 있는 어셈블러가 포함됩니다.LC-3에서는 C 언어를 사용하는 규칙도 있습니다.샘플 어셈블러, 컴파일러 및 시뮬레이터는 McGraw-Hill에 [1]의해 제공됩니다.

C 및 LC-3

LC-3의 C 함수에 대한 호출 규약은 x86 ISA 등의 다른 시스템에 의해 구현된 규칙과 유사합니다.C 프로그램을 실행하는 경우 아키텍처는 콜스택동적 메모리 할당을 위한 공간을 포함하는 메모리 모델을 유지합니다.이 모델에서는 프로세서의 8개의 범용 레지스터 중 4개가 특수한 역할을 담당합니다.R4는 글로벌 데이터를 로드 및 저장하기 위한 베이스 레지스터로 사용되며 R5는 콜 스택 상의 현재 함수 영역을 가리키기 위해 사용되며 R6은 스택 포인터로서 사용됩니다.또한 R7은 보통 함수 호출로부터의 리턴 주소 저장용으로 예약되어 있습니다.JSR, JSRR 및 TRAP 명령은 실행 중에 자동으로 반환 주소를 이 레지스터에 저장합니다.

이 모델에서 C 함수를 호출하면 함수의 파라미터가 스택 오른쪽에서 왼쪽으로 푸시됩니다.다음으로 호출되는 함수의 반환값, 반환되는 호출자 내의 명령어 주소 및 호출자 값 R5를 위한 공간이 스택 상에 작성된다.호출되는 함수의 로컬 변수는 선언된 순서대로 스택에 푸시됩니다.LC-3에는 네이티브 PUSH 명령과 POP 명령이 없기 때문에 스택을 구현하려면 추가 및 메모리 저장 명령을 별도로 사용해야 합니다.

LC-3b

LC-3b ISA에서는 다음과 같은 변경을 포함한 LC-3의 수정 버전에 대해 설명하고 있습니다.

  • 머신의 워드 사이즈는 16비트로 유지되지만 메모리는 동일한 주소 공간에서 바이트 주소 지정이 가능합니다.
  • LD 및 ST 명령(PC 상대 주소 지정을 사용하여 데이터를 로드 및 저장)이 제거되었습니다.
  • LDI 및 STI 명령(간접 로드 및 저장)에서는 PC 상대 어드레싱 대신 레지스터 기반 어드레싱을 사용합니다.
  • 메모리의 개별 바이트를 조작하기 위해 LDB와 STB라는2개의 명령어가 추가되었습니다.다른 명령어는 워드 전체에 대해 계속 동작합니다.
  • 예약된 opcode는 양방향 임의 크기의 산술적 및 논리적 이동을 지원하는 SHF 명령으로 변환되었습니다.

이러한 변경에 의해 LC-3b의 하드웨어는 LC-3의 하드웨어보다 약간 복잡해집니다.예를 들어, LC-3b는 다양한 크기의 데이터를 적절히 로드 및 저장하기 위해 메모리 유닛에 시프터(LC-3에는 해당되지 않음)와 추가 로직을 필요로 합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b Patt, Yale N.; Patel, Sanjay (2003). Introduction to Computing Systems: From Bits and Gates to C and Beyond. New York, NY: McGraw-Hill Higher Education. ISBN 0-07-246750-9. Retrieved 6 October 2010.
  2. ^ 위안장랴오, 왕영광."마이크로프로세서 랩용 FPGA 개발 보드에서의 LC-3 소프트 코어 사용." 2013. 페이지 612-613. "인텔리전트 테크놀로지엔지니어링 시스템"

외부 링크