프로그램 카운터

Program counter
1952년에 도입된 IBM 701 컴퓨터의 전면 패널.중앙의 조명은 다양한 레지스터의 내용을 표시합니다.지시 카운터는 왼쪽 아래에 있습니다.

프로그램 카운터(PC)는 인텔 x86Itanium 마이크로프로세서에서는 일반적으로 명령 포인터(IP)로 불리며 명령어드레스 레지스터(IAR)[1]라고도 불리며 명령어카운터 [2]또는 명령어시퀀서의 [3]일부로서 컴퓨터의 프로그램시퀀서[nb 1]위치를 나타내는 프로세서레지스터입니다.

일반적으로 PC는 명령을 가져온 후 증가하며,[4][nb 2] 실행되는 다음 명령의 메모리 주소("포인트 지정")를 유지합니다.

프로세서는 보통 메모리에서 명령을 순차적으로 가져오지만 제어 전송 명령은 PC에 새 값을 배치하여 순서를 변경합니다.여기에는 지점(점프라고도 함), 서브루틴 호출 반환이 포함됩니다.일부 주장의 진실에 따라 결정되는 전송은 컴퓨터가 다른 조건에서 다른 시퀀스를 따를 수 있도록 합니다.

브랜치는 메모리 내의 다른 곳에서 다음 명령을 가져옵니다.서브루틴 콜은 분기할 뿐만 아니라 PC의 이전 내용을 저장합니다.반환은 PC의 저장된 콘텐츠를 검색하여 PC에 다시 배치하고 서브루틴 호출에 이은 지시에 따라 순차 실행을 재개합니다.

하드웨어 구현

심플한 중앙처리장치(CPU)에서 PC는 여러 하드웨어 레지스터 중 하나일 수 있는 디지털 카운터(프로그램 카운터)입니다.명령[6] 사이클은 CPU가 PC 값을 주소 버스에 배치하여 메모리로 전송하는 페치부터 시작됩니다.메모리는 데이터 버스를 통해 해당 메모리 위치의 내용을 전송함으로써 응답합니다(이것은 단일 메모리 공간에 실행 가능 명령과 일반 데이터가 모두 포함된 저장 프로그램 컴퓨터 모델입니다).[7]취득 후 CPU는 취득한 메모리 내용을 기반으로 몇 가지 액션을 수행하며 실행을 계속합니다.이 사이클의 어느 시점에서 PC는 다음 실행 명령이 다른 명령이 되도록 변경됩니다(일반적으로 다음 명령이 현재 명령의 마지막 메모리 위치 바로 뒤에 있는 메모리 주소에서 시작하도록 증가합니다).

다른 프로세서 레지스터와 마찬가지로 PC는 바이너리 래치의 뱅크이며, 각 래치는 PC [8]값의 1비트를 나타냅니다.비트수(PC의 폭)는 프로세서 아키텍처와 관련되어 있습니다.예를 들어, "32비트" CPU는 32비트를 사용하여 2개의 메모리 유닛에 주소를 지정할32 수 있습니다.일부 프로세서에서 프로그램카운터의 폭은 주소 지정 가능한 메모리에 의존합니다.예를 들어, 일부 AVR 컨트롤러에는 [9]12비트 후에 반환되는 PC가 있습니다.

PC가 바이너리 카운터인 경우 COUNT UP 입력에 펄스가 적용되면 증분하거나 CPU가 다른 값을 계산하여 LOAD [10]입력에 대한 펄스에 의해 PC에 로드하는 경우가 있습니다.

현재 명령을 식별하기 위해 PC를 세그먼트 또는 페이지를 식별하는 다른 레지스터와 결합할 수 있습니다.이 방법에서는, 대부분의 메모리 유닛이 현재의 근처에 있는 것을 전제로 하고, 보다 적은 비트의 PC를 사용할 수 있습니다.

기계 아키텍처의 결과

일반적으로 증가하는 PC의 사용은 컴퓨터가 보통 일련의 명령을 실행하는 것으로 가정합니다.이러한 PC는 폰 노이만 아키텍처의 중심입니다.따라서 프로그래머는 순차적일 필요가 없는 알고리즘에 대해서도 순차 제어 플로우를 작성합니다.이에 따른 "von Neumann 병목 현상"은 비-von Neumann 또는 PC를 사용하지 않는 데이터 흐름 모델을 포함한 병렬 [11]컴퓨팅에 대한 연구로 이어졌습니다. 예를 들어, 상위 수준의 프로그래머는 원하는 함수를 지정하고 하위 수준의 프로그래머는 조합 논리를 사용하여 이를 지정할 수 있습니다.

또, 이 조사에서는, 종래의 PC 베이스의 CPU를 보다 고속으로 동작시키는 방법도 소개되고 있습니다.이러한 방법에는 다음과 같은 것이 있습니다.

  • 파이프라인: CPU 내의 다른 하드웨어가 여러 명령의 다른 단계를 동시에 실행합니다.
  • 하나의 명령으로 여러 효과를 얻을 수 있는 VLIW(Very Long Instruction Word) 아키텍처입니다.
  • 순서가 어긋난 실행을 예측하고 이후의 명령을 준비하여 일반 시퀀스 이외의 실행을 준비하는 기술입니다.

고급 프로그래밍의 결과

현대의 고급 프로그래밍 언어는 여전히 순차 실행 모델을 따르고 있으며, 실제로 프로그래밍 오류를 식별하는 일반적인 방법은 프로그래머의 손가락이 PC와 마찬가지로 실행 지점을 식별하는 "프로시저 실행"을 사용하는 것입니다.개략적인 언어는 기본적으로 [12]가상 머신의 머신 언어이며 하드웨어로 구축하기에는 너무 복잡하지만 소프트웨어로 에뮬레이트하거나 해석할 수 없습니다.

그러나 새로운 프로그래밍 모델은 순차 실행 프로그래밍을 초월합니다.

  • 멀티 스레드 프로그램을 작성할 때 프로그래머는 다른 스레드의 명령과 관련된 명령의 타이밍을 지정하지 않고 명령의 시퀀스로 각 스레드를 쓸 수 있다.
  • 이벤트 구동 프로그래밍에서 프로그래머는 프로그램의 전체 시퀀스를 지정하지 않고 이벤트에 응답하기 위한 명령 시퀀스를 작성할 수 있다.
  • 데이터 플로우 프로그래밍에서 프로그래머는 다른 섹션에 대한 타이밍을 지정하지 않고 컴퓨팅 파이프라인의 각 섹션을 쓸 수 있다.

기호.

벤더들은 어셈블리 언어 프로그램에서 프로그램 카운터를 상징하기 위해 서로 다른 문자를 사용합니다.Intel, Zilog, Texas Instruments, Toshiba, NEC, Siemens 및 AMD 프로세서 문서에서는 "$" 문자를 사용하는 것이 일반적이지만 Motorola, Rockwell Semiconductor, Microchip Technology Hitachi는 "*" [9]문자를 사용하는 반면 SGS-Thomson Microelectronics는 "PC"[9]를 사용합니다.

「 」를 참조해 주세요.

메모들

  1. ^ 최신 프로세서의 경우 명령 수준의 병렬 처리 및 순서가 어긋나는 실행이 발생할 수 있으므로 "순서대로의 위치"라는 개념은 너무 단순합니다.
  2. ^ 인크리먼트가 페치에 선행하는 프로세서에서 PC는 현재 실행 중인 명령을 가리킵니다.일부 프로세서에서는 PC가 현재 명령을 초과하는 거리를 가리키고 있습니다. 예를 들어 ARM7에서는 프로그래머가 볼 수 있는 PC의 값이 현재 명령을 초과하여 [5]지연 슬롯을 초과합니다.

레퍼런스

  1. ^ Mead, Carver; Conway, Lynn (1980). Introduction to VLSI Systems. Reading, USA: Addison-Wesley. ISBN 0-201-04358-0.
  2. ^ Principles of Operation, Type 701 and Associated Equipment (PDF). IBM. 1953.
  3. ^ Harry Katzan(1971), 컴퓨터 조직과 시스템/370, Van Nostrand Reinhold Company, 미국 뉴욕, LCCN 72-153191
  4. ^ Silberschatz, Abraham; Gagne, Greg; Galvin, Peter B. (April 2018). Operating System Concepts. United States: Wiley. pp. 27, G-29. ISBN 978-1-119-32091-3.
  5. ^ "ARM Developer Suite, Assembler Guide. Version 1.2". ARM Limited. 2001. Retrieved 2019-10-18.
  6. ^ L. 헤네시데이비드 A. Patterson(1990), 컴퓨터 아키텍처: 정량적 접근, Morgan Kaufmann Publishers, 미국, Palo Alto, ISBN 1-55860-069-8
  7. ^ B. Randall(1982), 디지털 컴퓨터의 기원, 스프링거-벨라그, 베를린, D.
  8. ^ C. Gordon Bell과 Allen Newell(1971), 컴퓨터 구조: 리딩과 예시, McGraw-Hill Book Company, New York,
  9. ^ a b c Arnold, Alfred (2020) [1996, 1989]. "E. Predefined Symbols". Macro Assembler AS – User's Manual. V1.42. Translated by Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. p. Table E.3: Predefined Symbols – Part 3. Archived from the original on 2020-02-28. Retrieved 2020-02-28. 3.2.12. WRAPMODE […] AS will assume that the processor's program counter does not have the full length of 16 bits given by the architecture, but instead a length that is exactly sufficient to address the internal ROM. For example, in case of the AT90S8515, this means 12 bits, corresponding to 4 Kwords or 8 Kbytes. This assumption allows relative branches from the ROM's beginning to the end and vice versa which would result in an out-of-branch error when using strict arithmetics. Here, they work because the carry bits resulting from the target address computation are discarded. […] In case of the abovementioned AT90S8515, this option is even necessary because it is the only way to perform a direct jump through the complete address space […]
  10. ^ Walker, B. S. (1967). Introduction to Computer Engineering. London, UK: University of London Press. ISBN 0-340-06831-0.
  11. ^ F. B. 챔버스, D.A. Duce and G. P. Jones(1984), Distributed Computing, Academic Press, 미국 올랜도, ISBN 0-12-167350-2
  12. ^ 더글라스 호프스타터(1980), 괴델, 에셔, 바흐: 영원한 황금 머리, 펭귄북스, 영국 하몬즈워스, ISBN 0-14-005579-7