Register
Register
Register
범용 레지스터
1
2
3
4
5
6
7
8
9
10
11
12
연산에 사용되는 레지스터
EAX : 연산과 함수 반환 값에 사용되는 레지스터
산술, 논리 연산에 사용되는 레지스터, 함수 리턴 값 전달용도로도 사용.
EBX : 간접 주소 지정 시 사용되는 레지스터
ESI, EDI와 결합해 인덱스에 사용되는 레지스터
ECX : 루프문에서 반복 명령 수행 시 반복 횟수를 저장하기 위해 사용하는 레지스터
EDX : 부호확장에 사용되는 레지스터
간접 주소 지정에서 사용되는 레지스터이고 곱셈, 나눗셈 시 보조 연산 레지스터
인덱스 레지스터
1
2
3
4
5
6
7
8
연산과 간접 주소 지정에 사용되는 레지스터
ESI : 데이터 복사 작업, 조작을 할 때 Source data address가 저장되는 레지스터
복사, 비교에 사용되는 Source string을 가리킴
EDI : 데이터 복사 작업을 할 때 Destination address가 저장되는 레지스터
복사, 비교에 사용되는 Destination string을 가리킴
포인터 레지스터
1
2
3
4
5
6
7
8
주소를 가리키는 포인터 용도로 사용되는 레지스터
EBP : 스택 프레임 사용 시 실행 중인 함수 스택 프레임의 시작 주소를 가리키는 레지스터
(스택 프레임이 소멸되면 이전에 사용되던 스택 프레임을 가리킴)
ESP : 가장 최근에 스택에 들어온 Data를 가리키는 레지스터
(PUSH, POP 연산에 의해 4byte씩 바뀐다.)
인스트럭션 레지스터(인스트럭션 포인터)
1
9) EIP : 다음으로 실행할 명령어의 주소가 저장되는 레지스터
세그먼트 레지스터
1
2
3
4
5
6
7
8
1) CS(Code Segment) : Code Segment의 시작 주소를 가리키고 EIP 레지스터가 가지고 있는
offset과 더해져 실행을 위한 명령어 주소 참조
2) DS(Data Segment) : Data Segment의 시작 주소를 가리키고 범용 레지스터가 가지고 있는
offset과 더해져 데이터 영역 주소 참조
3) SS(Stack Segment) : Stack Segment의 시작 주소를 가리키고 포인터 레지스터가
가지고 있는 offset과 더해져 스택 영역 주소 참소
Flags
1
2
3
4
5
6
7
8
9
10
산술, 논리 연산을 통한 결과 값으로 Flag값이 변함.
CF(Carry Flag) : 부호 없는 값의 연산 결과가 피연산자의 범위를 벗어났을 때 설정됨.
ZF(Zero Flag) : 연산 결과가 0일 때 1로 설정됨.
SF(Sign Flag) : 연산 결과의 최상위 비트가 음수이면 1로 설정되고 양수이면 0으로 설정됨.
OF(Overflow Flag) : 부호 있는 숫자의 연산 결과가 피연산자의 범위를 벗어났을 때 설정됨.
출처
This post is licensed under CC BY 4.0 by the author.