안 쓰던 블로그
컴퓨터 구조-메모리 구조와 레지스터 본문
메모리 구조
프로그램이 실행되면 OS가 메모리(RAM)에 공간을 할당한다
할당해주는 메모리 공간은 데이터, 코드, 스택, 힙의 4가지가 있다
1. 데이터 영역
전역변수와 static변수가 할당된다
프로그램 시작과 동시에 할당되며, 프로그램이 종료될 때 메모리가 소멸된다
2. 코드 영역
유저가 작성한 소스코드가 들어가는 영역, 실행할 프로그램의 코드가 저장된다
3. 스택 영역
프로그램이 자동으로 사용하는 임시 메모리 영역
함수 호출 시 생성되는 지역 변수와 매개변수가 저장되며, 함수 호출이 완료되면 메모리가 소멸된다
컴파일될 때 메모리 공간을 가짐
4. 힙 영역
프로그래머가 할당하고 해제하는 메모리 공간
이 공간을 동적 데이터 영역이라고도 하며, 여기에 메모리를 할당하는 것을 동적 할당이라고 한다
런타임 시에 크기가 결정된다
레지스터의 종류
1. 범용 레지스터
EAX: 누산기 레지스터, 입출력/산술/논리 연산에 사용된다
EBX: 베이스 레지스터, 주소 지정 확장이나 초기 주소 지정을 위해 사용된다
ECX: 카운터 레지스터, 반복문의 횟수를 지정하는 데 사용된다
EDX: 데이터 레지스터, EAX의 보조 누산기로 주로 사용되며 보조값을 저장한다
EBP: 베이스 포인터, 스택의 베이스 포인터로 사용된다. 베이스 포인터가 스택의 시작점이 되며, EBP를 기준으로 지역 변수 및 함수 인자가 접근이 된다
ESP: 스택 포인터, 현재까지 사용된 스택의 위치를 저장한다
ESI, EDI: 연산 및 간접 주소 연산에 주로 사용, 문자열 처리를 담당한다
2. 포인터 레지스터
특정 주소를 가리키는 레지스터
BP: 베이스 포인터, 주소를 간접 지정한다
SP: 스택 포인터, 스택의 맨 마지막 자료의 주소 값을 저장한다
IP: 다음에 수행할 명령어가 저장되어있는 주소를 가리킨다
3. 세그먼트 레지스터
길이는 16비트이며 세그먼트 영역 메모리에 주소를 지정한다
CS: 코드 세그먼트, 함수나 제어문 같은 명령어들이 저장된다
DS: 데이터 세그먼트, 전역/정적 변수 데이터가 들어있다
SS: 스택 세그먼트, 주소와 데이터를 일시적으로 저장할 목적으로 쓰이는 스택의 주소를 지정하는데 쓰인다
ES: 추가 레지스터, 문자 데이터의 주소를 지정한다
FS, GS: ES와 같은 엑스트라 세그먼트 레지스터
4. EFLAGS 레지스터
1) 상태 플래그
캐리 플래그: 산술연산 결과가 자리 올림이나 자리 내림이 발생하면 set
패리티 플래그: 산술연산 결과가 하위 1바이트 중 1비트가 짝수면 set, 아니면 clear(0)
보조 캐리 플래그: 산술연산 결과가 비트3자리에 자리 올림이나 자리 내림이 발생하면 set
제로 플래그: 산술연산 결과가 0이면 set, 아니면 리셋(0)
부호 플래그: 최상위 비트의 결과와 같은 결과로 set(1). Signed Interger로 사용되는 경우 이 플래그가 0이면 양수, 1이면 음수다
오버플로우 플래그: 연산 결과가 사인 비트를 제외한 최대 허용 정수값보다 크거나 최소 정수보다 작으면 set
2) 제어 플래그
방향 플래그: 문자열을 처리하는 스트링 명령을 제어하는 플래그, set(1)되어 있으면 높은 주소에서 낮은 주소로 처리, clear(0) 되어 있으면 낮은 주소에서 높은 주소로 처리한다
3) 시스템 플래그
트랩 플래그: 디버깅 할 때 한 명령씩 프로그램을 수행하도록 설정되어 있다면 set
인터럽트 플래그: 프로세스로부터 인터럽트가 발생하면 인터럽트 처리를 할 것인지 제어. set이면 인터럽트 신호가 들어왔을 때 인터럽트를 처리하고, clear되어 있다면 인터럽트 신호가 오더라도 반응하지 않는다
[연습 문제]
1. 다음 d변수는 어떤 영역에 할당될까?
void f(){
int d = 30;
}
스택영역
함수 안에 선언되어 있으므로 지역변수 d는 스택영역에 할당된다
2. 다음 중 범용 레지스터에 대한 설명으로 틀린 것은?
1) EAX: 입출력/산술/논리 연산에 사용된다
2) EBX: 주소 지정 확장이나 초기 주소 지정을 위해 사용된다
3) ECX: 반복문의 횟수를 지정하는 데 사용된다
4) EDX: 현재까지 사용된 스택의 위치를 저장한다
5) EBP: 스택의 베이스 포인터로 사용된다
4번
EDX는 데이터 레지스터로 EAX의 보조 누산기로 주로 사용되며 보조값을 저장한다
3. 다음이 설명하는 세그먼트 레지스터의 종류는? 이 레지스터에는 세그먼트, 전역 변수, 정적 변수 데이터가 들어있다
데이터 세그먼트 레지스터
4. 제어 플래그 중 방향 플래그가 1이다. 문자열은 어떤 순서로 처리될까?
1) 높은 주소->낮은 주소
2) 낮은 주소->높은 주소
답: 1번
방향 플래그가 set(1)이면 높은 주소->낮은 주소로 처리하고
clear(0)이면 낮은 주소->높은 주소로 처리한다
5. 시스템 플래그 중 인터럽트 플래그가 0이다. 인터럽트가 신호가 도착했을 때 어떻게 처리하는가?
clear(0)되어 있다면 인터럽트 신호를 무시한다
'컴퓨터 구조' 카테고리의 다른 글
컴퓨터구조-캐시 기억장치 (0) | 2020.06.01 |
---|---|
컴퓨터 구조-분기 명령어, 서브루틴, 0/1/2/3주소 명령어 (0) | 2020.05.30 |
컴퓨터구조 -명령어를 효과적으로 실행하기 위한 기법 (0) | 2020.05.24 |
컴퓨터구조-컴퓨터 정보 표현(2진수 논리연산, 1의 보수, 2의 보수) (0) | 2020.04.19 |
컴퓨터구조-어셈블리 프로그램 구조 (0) | 2020.04.18 |