상태등록부

Status register

상태 레지스터, 플래그 레지스터 또는 상태 코드 레지스터(CCR)는 프로세서의 상태 플래그 비트 모음입니다.이러한 레지스터의 예로는 x86 아키텍처플래그 레지스터, z/Architecture를 통한 IBM 시스템/360 아키텍처프로그램 상태 워드(PSW) 레지스터의 플래그, ARM Cortex-A 아키텍처의 응용 프로그램 상태 레지스터(APSR) 등이 있습니다.[1]

상태 레지스터는 프로세서의 상태에 대한 정보를 담고 있는 하드웨어 레지스터입니다.개별 비트는 프로세서에서 실행되는 기계 코드 명령에 의해 암시적으로 또는 명시적으로 읽혀지고/쓰기됩니다.상태 레지스터를 사용하면 이전 명령의 결과에 따라 명령을 수행할 수 있습니다.

일반적으로 상태 레지스터의 플래그는 산술 및 비트 조작 작업의 효과로 수정됩니다.예를 들어, 작업 결과가 0이면 Z 비트를 설정하고 0이 아니면 클리어할 수 있습니다.다른 클래스의 명령어도 플래그를 수정하여 상태를 나타낼 수 있습니다.예를 들어, 문자열 명령어는 일치/일치하지 않는 것을 발견했기 때문에 명령어가 종료되었는지, 문자열의 끝을 찾았기 때문에 종료되었는지를 나타내기 위해 그렇게 할 수 있습니다.플래그가 이전 명령의 지정된 결과를 나타내는 경우에만 지정된 동작(프로세서, 점프, 호출, 반환 등에 따라 다름)이 발생하도록 플래그를 후속 조건부 명령으로 읽습니다.

MIPSAlpha와 같은 일부 CPU 아키텍처에서는 전용 플래그 레지스터를 사용하지 않습니다.다른 것들은 암묵적으로 플래그를 설정하거나 읽지 않습니다.이러한 기계는 명령 간에 암묵적인 상태 정보를 전혀 전달하지 않거나 명시적으로 선택된 범용 레지스터에 전달합니다.

상태 레지스터에는 더 특수화된 플래그, 인터럽트 활성화 비트 및 유사한 유형의 정보와 같은 다른 필드가 있는 경우가 많습니다.인터럽트 동안, 현재 실행 중인 스레드의 상태는 프로그램 카운터 및 기타 활성 레지스터와 함께 상태 레지스터의 현재 값을 머신 스택 또는 메모리의 다른 예약된 영역에 저장함으로써 보존(그리고 나중에 호출)될 수 있습니다.

공통기

이것은 거의 모든 최신 프로세서에 구현된 가장 일반적인 CPU 상태 레지스터 플래그의 목록입니다.

깃발 이름. 묘사
Z 제로 플래그 산술 또는 논리 연산(또는 부하)의 결과가 0임을 나타냅니다.
C 깃발달기 필요에 따라 중요도가 낮은 단어에서 중요도가 높은 단어의 최하위 비트로 이진수를 전달하여 단일 단어보다 큰 숫자를 추가/감산할 수 있습니다.또한 비트 시프트를 확장하고 많은 프로세서에서 비슷한 방식으로 회전하는 데도 사용됩니다(때로는 전용 X 플래그를 통해 수행되기도 함).
S / N 사인플래그
음기
수학적 연산의 결과가 음수임을 나타냅니다.일부 프로세서에서는 [2]N과 S 플래그가 서로 다른 의미와 용도로 구별됩니다.하나는 마지막 결과가 음수인지 여부를 나타내고 다른 하나는 감산 또는 추가가 발생했는지 여부를 나타냅니다.
V / O / W 오버플로 플래그 작업의 서명된 결과가 너무 커서 2의 보표 표현을 사용하여 레지스터 너비에 맞지 않음을 나타냅니다.

기타플래그

일부 프로세서에서는 상태 레지스터에 다음과 같은 플래그도 포함되어 있습니다.

깃발 이름. 묘사
H / A / DC 반캐리 깃발
보조기
디지트 캐리
소수점 조정 플래그
마지막 연산 작업의 결과로 니블(일반적으로 바이트 피연산자의 4비트 절반 사이) 간에 비트 운반이 생성되었음을 나타냅니다.이러한 플래그는 일반적으로 이진 하드웨어에서 BCD 산술 연산을 구현하는 데 유용합니다.
P 패리티 플래그 마지막 결과의 설정 비트 수가 홀수인지 짝수인지 나타냅니다.
I 인터럽트 플래그 일부 프로세서에서 이 비트는 인터럽트가 활성화되었는지 마스킹되었는지를 나타냅니다.[3]프로세서에 PDP-11과 같이 여러 의 인터럽트 우선 순위 레벨이 있는 경우, 현재 스레드의 우선 순위를 나타내기 위해 여러 비트가 사용될 수 있으며, 높은 우선 순위로 설정된 하드웨어에 의해서만 인터럽트될 수 있습니다.다른 아키텍처에서 비트는 인터럽트가 현재 활성 상태이며 현재 스레드가 인터럽트 핸들러의 일부임을 나타낼 수 있습니다.
S 상사기 둘 이상의 보호 링을 제공하는 프로세서의 경우 상태 레지스터의 하나 이상의 비트가 현재 스레드의 링을 나타냅니다(신뢰할 수 있는지 또는 다른 스레드를 방해할 수 있는 요청에 대해 운영 체제를 사용해야 하는지 여부).링이 두 개뿐인 프로세서에서는 단일 비트가 슈퍼바이저와 사용자 모드를 구분할 수 있습니다.

산술 플래그가 없는 CPU 아키텍처

상태 플래그를 사용하면 이전 명령의 결과에 따라 명령을 수행할 수 있습니다.슈퍼스칼라투기형 프로세서와 같은 파이프라인 프로세서에서는 처리 속도가 느려지거나 주변에서 작동하는 데 추가 하드웨어가 필요한 위험이 발생할 수 있습니다.[4]

일부 매우명령어 프로세서는 상태 플래그를 제공합니다.단일 명령은 모두 테스트를 수행하고 ab를 비교하고 점프를 c로 이동하는 등의 작업을 수행할 테스트의 결과를 나타냅니다.테스트 결과는 후속 지침을 위해 저장되지 않습니다.

상태 레지스터의 또 다른 대안은 프로세서 명령어가 프로그램이 요청할 때 상태 정보를 범용 레지스터에 저장하는 것입니다.MIPS, AMD 29000, DEC Alpha, 및 RISC-V는 비교 결과를 단일 비트 또는 0 또는 1의 숫자 값으로서 범용 레지스터에 저장하는 비교 명령을 제공하는 아키텍처의 예이다. 조건부 분기는 범용 레지스터의 값에 기초하여 동작합니다.

일반적으로 비교 지침에서는 동일성 또는 부호/부호 크기를 검정합니다.다른 조건을 검정하기 위해 프로그램은 등분 공식을 사용합니다.예를 들어, MIPS에는 "캐리 비트"가 없지만, 여러 단어를 추가하는 프로그램은 레지스터의 단일 단어 추가가 피연산자보다 낮은지 테스트함으로써 오버플로 여부를 테스트할 수 있습니다.[4]

        # 낮은 = 송풍 + 광대  애듀 저급한, 불다., 음울한         # 설정 tmp = 낮은 경우 1, 낮은 경우 0  슬투 tmp, 저급한, 음울한  애듀 높은 곳, 흥청망청, 흥건한  애듀 높은 곳, 높은 곳, tmp 

sltu명령어 세트tmp다른 두 피연산자의 지정된 비교에 따라 1 또는 0으로 바뀝니다.(여기서, 범용대장tmp조건부 점프를 제어하기 위한 상태 레지스터로 사용되지 않으며, 가능한 값 1(저차 덧셈에서 운반을 나타내는 값)이 고차 단어에 추가됩니다.)

계산할 때 두 개의 단어가 추가되기 때문에 이 계획은 세 개 이상의 단어를 추가할 때 덜 편리해집니다.b + c + tmp, 둘 중 하나는 캐리를 생성할 수 있으며, 캐리는 2개로 감지해야 합니다.sltu지침들.다행히 두 개의 캐리는 오버플로우의 위험 없이 서로 추가될 수 있으므로 단어당 5개의 지시사항이 추가될 때 상황이 안정됩니다.

참고 항목

참고문헌

  1. ^ "ARM Information Center". infocenter.arm.com. Retrieved 2019-05-18.
  2. ^ "Toshiba 900 Operation Manual, chap. 3" (PDF). Archived from the original (PDF) on 2006-01-15.
  3. ^ "Atmel 8-Bit Microcontroller With 4/8/16/32KBytes In-system Programmable Flash - Datasheet" (PDF). Microchip Technology.
  4. ^ a b Mashey, John (1996-06-04). "Carry bits; The Architect's Trap". Retrieved 2013-10-05.