일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- DDR SDRAM
- dfs
- 보조기억장치
- 131701
- 프로그래머스
- Transform
- 장치컨트롤러
- 컴퓨터 구조
- BFS
- 입출력장치
- 지역변수
- static
- 138477
- 코딩테스트
- 그래프
- 렌더링 파이프라인
- 컴퓨터구조
- 혼자공부하는
- 혼자 공부하는
- 프로세스
- 풀이
- 독학
- 스레드
- CPU 스케줄링
- C++
- 인터럽트
- DirectX
- 멀티스레드
- 한빛미디어
- 운영체제
- Today
- Total
빼미의 개발일기
[컴퓨터 구조] - 10강. 레지스터 본문
이 글은 한빛미디어 '혼자 공부하는 컴퓨터 구조 + 운영체제'를 공부하고 정리한 내용입니다.
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장된다.
● 레지스터 : CPU 내부의 작은 임시저장장치 - 프로그램 속 명령어 & 데이는 실행 전후로 레지스터에 저장
● 반드시 알아야 할 레지스터 (1)
1. PC (Program Counter) : 메모리에서 가져올 명령어의 주소 (메모리에서 읽어 들일 명령어의 주소) 저장
2. IR (Instruction Register) : 해석할 명령어 (방금 메모리에서 읽어 들인 명령어) 저장
3. MAR (Memory Address Register) : 메모리 주소 저장
4. MBR (Memory Buffer Register) : 해당 주소에서 가져온 명령어 & 데이터를 저장
◆ 순차적인 실행 흐름이 끊기는 경우
- PC는 순차적으로 증가하며 프로그램을 차례대로 실행하는데, 명령어 중 JUMP, CONDITIONAL JUMP, CALL, RET와 같은 특정 메모리 주소로 옮기는 명령어가 실행될 때는 해당 메모리 주소를 PC에서 적용하여 저장하게 된다.
(PC 1200번지 실행 중 - JUMP 2500 명령어 -> PC 2500부터 순차적 실행)
또한 인터럽트가 발생해도 프로그램의 순차적 실행이 끊김.
● 반드시 알아야할 레지스터 (2)
5. FR (Flag Register)
- ALU 연산 결과에 따른 플래그를 저장하는 레지스터.
- CF (Carry Flag) : 산술 연산에 의한 자리 올림이나 자리내림이 발생할 때 1
- ZF (Zero Flag) : 산술 연산 결과가 0이면 1, 0 이외는 0
- OF (Overflow Flag) : 부호가 있는 수의 오버플로우가 발생하거나 MSB(2진수의 최상위 비트)를 변경했을 때 1
- PF (Parity Flag) : 산술 연산 결과가 짝수이면 1
- AF (Adjust Flag) : 8비트 피연산자를 사용한 산술 연산에서 비트 3을 비트 4로 자리올림하면 1
- SF (Sign Flag) : 산술 및 논리 연산 결과가 음수이면 1
- DF (Direction Flag) : 스트링 명령을 제어해서 DF가 1이면 스트링을 높은 주소에서 낮은 주소로 처리, 0이면 스트링을 낮은 주소에서 높은 주소로 처리
- TF (Trap Flag) : 디버깅을 할 때 Single Step Mode(한 번에 하나의 명령어만 실행되는 모드)를 활성화하면 1
- IF (Interrupt enable Flag) : 프로세서의 인터럽트 처리 여부를 제어 IF가 1이면 시스템에서 인터럽트를 처리, 0이면 시스템에서 인터럽트를 무시
6. 범용 레지스터 (General Purpose Register)
- 이름대로 자유롭게 사용할 수 있는 레지스터. 하지만 사용용도나 저장되는 값에 따라 저장공간은 지정된다.
- EAX (Extended Accumulator Register) :
함수의 리턴 값 저장이나 산술 연산에 이용. Win32 API 함수들은 모두 리턴 값을 EAX에 저장한 후에 리턴. - EBX (Extended Base Register) :
메모리 주소를 저장하기 위한 용도로 사용. DS 세그먼트의 포인터를 주로 저장 - ECX (Extended Count Register) :
반복적으로 실행되는 특정 명령에 사용 (루프, 반복문). 좌우 시프트 연산자에도 사용. - EDX (Extended Data Register) :
일반적인 자료를 저장할 때 사용. 입출력 연산에도 사용. 큰 수의 곱셈과 나눗셈 연산에서는 EAX와 함께 사용.
7. 스택 포인터 (Stack Pointer)
- CPU 안에서 스택에 데이터가 채워진 위치를 가리키는 레지스터. 즉 스택의 꼭대기를 가리키며, 스택에 값이 쌓이거나 빠질 때마다 스택 포인터의 값도 변함.
8. 베이스 레지스터 (Base Register)
- 데이터용 메모리 영역의 시작 주소를 저장하는 레지스터.
- 베이스 레지스터는 주소 지정 방식을 정할 때 사용하는데, PC를 사용할 때와 베이스 레지스터를 사용할 때로 주소 지정 방식이 나눠진다.
● 상대 주소 지정 방식 : 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
● 베이스 레지스터 주소 지정 방식 : 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
'프로그래밍 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] - 12강. 빠른 CPU를 위한 설계 기법 (0) | 2023.09.06 |
---|---|
[컴퓨터 구조] - 11강. 명령어 사이클과 인터럽트 (0) | 2023.09.04 |
[컴퓨터 구조] - 9강. CPU의 내부 구성 - ALU와 제어장치 (0) | 2023.07.23 |
[컴퓨터구조] - 8강. 추가 : C언어의 컴파일 과정 (0) | 2023.07.22 |
[컴퓨터 구조] - 7강. 명령어의 구조와 주소 지정 방식 (0) | 2023.07.22 |