답변:
서브 루틴 호출 / 반환 및 인터럽트 처리를위한 하드웨어 스택이있는 많은 저수준 마이크로 컨트롤러가 있지만 데이터 (변수)를 저장하는 것이 불가능하지는 않지만 어렵게 만들며 순수한 소프트웨어 데이터 스택을 구현하는 것은 대단히 비효율적입니다. 8051은 전형적인 예이며, 저급 PIC (PIC12 / PIC16)는 또 다른 예입니다. 이러한 머신에서 자동 스택에 대한 정적 스토리지 위치를 지정하여 데이터 스택이 에뮬레이트되며,이 위치의 재사용 양은 컴파일러의 정교함에 의존합니다.
스택 에뮬레이션이 이런 식으로 수행되는 경우 함수의 각 인스턴스가 "비공개"변수에 대해 동일한 정적 위치를 재사용하므로 재귀 (직접 또는 간접적으로 호출되는 함수)는 작동하지 않습니다. 일부 컴파일러는 재귀 사용을 제한적으로 허용하며 (일반적으로 #pragma
일종의 방법으로 구현 됨 ), 속도 저하에 관계없이 진정한 데이터 스택을 생성합니다.
그 외에도 DEC PDP-8 및 IBM System / 360을 포함하여 서브 루틴 / 인터럽트 처리를위한 하드웨어 스택이 전혀없는 CPU 아키텍처가 있습니다. 이러한 머신에서 PC (반환 주소)와 상태 레지스터 (인터럽트 용)는 레지스터 또는 메모리 위치에 저장되었지만 생각할 수있는 모든 경우에 머신에는 충분히 유연한 주소 모드가있어 스택을 쉽게 만들 수있었습니다. 소프트웨어로.
"스택 지원"은
에뮬레이션을 통해 하드웨어 지원없이이를 에뮬레이션 할 수 있습니다. 에뮬레이션은 변수를 사용하여 RAM에서 같은 종류의 컴파일러 생성 코드입니다. 현대 컴퓨터 아키텍처에서 스택을 직접 지원하지 않는 경우는 거의 없습니다.
프로그래밍 언어에서 변수의 의미론은 직선 어셈블리보다 높은 언어의 경우 대상 하드웨어 아키텍처와 거의 관련이 없습니다. 컴파일러 작업은 프로그래밍 언어의 시맨틱 계약을 준수하는 기계 코드를 생성하는 것입니다.