본문 바로가기
→ My Meta+IT/리버싱

어셈블리어/Assembly_1

by DigitalJobs 2022. 1. 14.

어셈블리어/Assembly_1

1. 레지스터란?

CPU 내부에 존재하는 작은 고속의 메모리이다.

 

레지스터의 종류

> 위 레지스터들은 범용 레지스터, 인덱스 레지스터, 포인터 레지스터라고 한다.

> 32비트 환경에서는 첫 글자가 E(Extended)로 시작한다.

> 64비트 환경에서는 첫 글자가 R(Register)로 시작하고 32비트의 레지스터를 포함한다.

 

범용 레지스터

AX(Accumulator) : 연산에 사용

BX(Base) : 메모리 주소 지정 시 사용

CX(Counter) : 반복과 같은 상황에 사용

DX(Data) : EAX와 함께 연산, 부호확장

 

인덱스 레지스터

SI(Source) : 메모리를 이동 및 비교 시 해당 주소

DI(Destination) : 메모리 이동 및 비교 시 목적지 주소

 

포인터 레지스터

IP(Instruction) : 다음에 실행할 명령어의 주소를 가리킴

SP(Stack) : 현재 스택의 위치(스택 최상부 offset을 가리킴)

BP(Base) : 스택 데이터에 접근하기 위해 사용

 

EAXAX, AH, AL로 구성되어 있다.

EAX를 반으로 나누면 32비트 컴퓨터 이전에 쓰이던 확장되지 않은 AX가 포함되어 있고 AXAH(High)AL(Low)로 구성되어 있다마찬가지로 64비트 환경의 경우 EAX가 포함된 64비트의 레지스터 RAX가 된다.

 

플래그 레지스터

알파벳 하나로 이루어진 레지스터를 더블클릭하면 옆의 숫자가 바뀌고 EFL의 값도 바뀐다.

EFLEFLAGS(Extended FLAGS)의 줄임말이다.

플래그를 1로 설정하는  것은 SET(세트)라고 하며 0으로 설정하는 것은 CLEAR 또는 RESET이라고 한다.

EFLAGS 레지스터는 목적에 따라 상태 플래그, 제어 플래그, 시스템 플래그로 나눌 수 있다.

 

 

상태 플래그

CF(Carry, 0bit) : 연산 시 올림수나 빌림수를 저장한다.

PF(Parity, 2bit) : 하위 1byte에서 1bit가 짝수면 set 아니면 clear

AF(Auxiliary, 4bit) : 3bit에 올림수나 빌림수가 발생할 때 set

ZF(Zero, 6bit) : 연산 결과가 0이면 set 아니면 clear

SF(Sign, 7bit) : 음수일 때 set 앙수면 clear

OF(Overflow, 11bit) : 연산 결과가 오버플로우이면 set

 

제어 플래그

DF(Direction, 10bit) : 문자열을 처리할 때 set이면 감소하면서(높은 주소에서 낮은 주소 순으로)  처리 clear면 증가하면서 처리

 

시스템 플래그

TF(Trap, 8bit) : 디버깅 시 single step mode 활성 시 set

IF(Interrupt, 9bit) : set이면 인터럽트(입출력 또는 예외상황 알림)처리, clear면 인터럽트 무시

 

세그먼트 레지스터

CS(Code) : 코드 세그먼트(명령코드가 작성되는 부분)의 시작 주소를 포함한다.

DS(Data) : 데이터 세그먼트(데이터가 놓여진 부분)의 시작 주소를 포함한다.

SS(Stack) : 스택 세그먼트(스택에서 데이터를 처리하는 부분)의 시작 주소를 포함한다.

ES(Extra) : 데이터 수신 측의 시작 부분을 포함한다. 또한 스트링 명령에 보조적으로 사용된다.

FS, GS : ES과 비슷한 역할로 여분의 세그먼트 레지스터이다.

 

댓글