무민이의 반반무많이

x86(32bit) 프로그램 실행 레지스터 본문

Assembly/Theory

x86(32bit) 프로그램 실행 레지스터

M00min 2016.07.08 23:44

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)


범용 레지스터 8개, 세그먼트 레지스터 6개, 프로세서 상태 플래그 레지스터(EFLAGS) 1개, 

명령어 포인터(EIP) 1개로 구성


● 범용 레지스터 : 계산과 데이터 전송에 주로 사용. EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI가 있다.

32비트

하위 16비트

하위 16비트의

상위 8비트

하위 16비트의

하위 8비트

EAX

AX

AH

AL

EBX

BX

BH

BL

ECX

CX

CH

CL

EDX

DX

DH

DL 


32비트

하위 16비트

ESI

SI

EDI

DI

EBP

BP

ESP

SP

EAX : 곱셈, 나눗셈 명령어에서 자동으로 사용

ECX : CPU가 루프카운터로 자동으로 사용

ESP(Extended Stack Pointer) : 스택에 있는 데이터의 주소 지정. 계산과 데이터 전송에는 거의 사용되지 않음

ESI(Extended Source Index), EDI(Extended Destination Index) : 고속 메모리 전송 명령어에서 사용

EBP : 고급언어에서 스택에 있는 함수 매개변수와 지역변수를 참조하기 위해 사용

 

● 세그먼트 레지스터

실제 주소 모드 : 세그먼트라고 하는 미리 할당된 메모리 영역의 시작 주소를 가리킨다.

보호 모드 : 세그먼트 서술자 테이블에 대한 포인터를 갖는다.

16비트

CS

SS

DS

ES

FS

GS


● 프로세서 상태 플래그 레지스터(EFLAGS) : CPU의 동작을 제어하거나 CPU 연산의 결과를 반영하는 개별적인 2진수 비트들로 구성(1 : 설정, 0 : 해제 or 리셋)

CF(Carry Flag) : 부호 없는 산술 연산 결과가 너무 커서 저장할 수 없을 때 1

OF(Overflow Flag) : 부호 있는 산술 연살 결과가 너무 크거나 작아서 저장할 수 없을 때 1

SF(Sign Flag) : 산술 논리 연산 결과가 음수일 때 1

ZF(Zero Flag) : 산술 논리 연산 결과가 0일 때 1

AC(Auxiliary Carry Flag) : 8비트 피연산자 산술 연산에서 3번 비트에서 4번 비트로 캐리가 발생할 때 1

PF(Parity Flag) : 1인 비트의 개수가 짝수인 경우 1. 일반적으로 오류 검사에 사용


● 명령어 포인터(EIP) : 다음에 실행할 명령어의 주소를 포함

0 Comments
댓글쓰기 폼