레지스터
레지스터의 종류
- general register
- index register
- pointer register
- flag register
- segment register
General Register
- EAX : Extend Accumulator Register
- 산술 연산자 레지스터
- 함수의 return값 지정
- EBX : Extend Base Register
- 간접 번지지정에 사용
- 산수/변수를 저장
- ECX : Extend Counter Register
- REP(반복 레지스터)에 얼마나 반복할 것인지 저장
- 반복(Loop)에서 반복횟수 수행
- EDX : Extend Data Register
- EAX를 보조
Index Register
- ESI : Extend Source Index
- 복사,비교를 할 경우 출발지 주소 저장
- EDI : Extend Destination Index
- 복사,비교를 할 경우 목적지 주소 저장
Pointer Register
- ESP : Extend Stack Pointer
- 스택의 top(bottom grow면 bottom) 주소 저장
- EBP : Extend Base Pointer
- 스택의 시작점(기준점 바닥)을 저장하는 레지스터
EIP : Extend Instruction Pointer ( AKA. PC-Program Counter)
- 다음 명령어의 위치를 저장하는 레지스터
eflags 레지스터
앞의 e는 extend로 16bit에서 32bit으로 확장되었다는 의미, 즉 32bit짜리 레지스터다. 또한 이름에서 알 수 있뜻이 flag들을 모아놓은 레지스터다.
flag란 어떤 조건을 만족했을 때 깃발 올리고, 아니라면 내리는 것 깃발을 생각하면 이해가 쉽다. 각 깃발마다 의미가 있으며, eflags에 있는 flag들은 다음과 같은 의미로 분류 될 수 있다.
- 연산 결과 : ZF(연사결과 0,1 ),SF(최상위 비트),CF(빌림수 발생 유무)
- 시스템 제어: IP(외부 인터럽트 받을지 말지 선택 )
- 문자열 제어 : DF
- 이외에도 여러 flag들이 있지만 생략
이런 깃발들은 어던 동작을 수행을 할지 말지 결정하는 변수로써 기능하는 경우가 많으며, eflags의 flag는 대부분 어셈블리에서 비교나 조건문 처리 시 많이 사용된다. 예를 들면 다음과 같다.cmp eax, ebx // 두 레지스터의 값을 비교 -> eflags 레지스터의 ZF flag가 0 또는 1로 설정 je eual_label // ZF flag의 값을 보고 1이면 jump, 아니면 지나친다.
세그먼트 레지스터
세그먼트 디스크립터 테이블(SDT)의 인덱스를 나타낸다. 다음은 segment register와 연결된 segment discriptor가 가리키는 주소들이다.
- cs : 코드 세그먼트 시작 주소
- ss : 스택 세그먼트 시작 주소
- ds : 데이터 세그먼트 시작 주소
- es, fs, gs : 추가적인 데이터 세그먼트 시작 주소
caller와 callee
caller,callee 정의
caller : 다른 함수를 호출하는 함수
callee : 호출 받은 함수
함수호출(call)의 의미 : 진행중이던 caller의 상태를 백업하고 callee로 갔다가 다시 와서 백업한 상태를 되돌리고 그대로 이어서 진행
이때 caller의 상태는 그 시점의 register들의 값이다. 그리고 caller가 신경써서 저장하고 보존해야 하는 레지스터들ㅇ르 caller-saved-register라고 하는데, 이미 저장을 했기 때문에 callee는 이 레지스터들을 자유롭게 사용할 수 있다.
- 콜러가 저장하는 레지스터 (caller-saved-register) :
- caller가 사용하기 전에 반드시 백업해야 하는 레지스터, 콜리는 자유롭게 사용 가능하다.
- EAX, ECX, EDX
- 콜리가 저장하는 레지스터 (callee-saved-register) :
- EBX, ESI, EDI, EBP
Pinto project2의 test flow

출처 & 참고문헌
'SW 정글 일지' 카테고리의 다른 글
정글 개발일지 week10 핀토스의 마무리 (0) | 2024.05.28 |
---|---|
정글 개발일지week09 (1) | 2024.05.21 |
정글 개발일지 week07 (0) | 2024.05.02 |
정글 개발일지 week02 (0) | 2024.03.31 |
정글 에세이 : 과거와 앞으로의 정글 (1) | 2024.03.16 |
레지스터
레지스터의 종류
- general register
- index register
- pointer register
- flag register
- segment register
General Register
- EAX : Extend Accumulator Register
- 산술 연산자 레지스터
- 함수의 return값 지정
- EBX : Extend Base Register
- 간접 번지지정에 사용
- 산수/변수를 저장
- ECX : Extend Counter Register
- REP(반복 레지스터)에 얼마나 반복할 것인지 저장
- 반복(Loop)에서 반복횟수 수행
- EDX : Extend Data Register
- EAX를 보조
Index Register
- ESI : Extend Source Index
- 복사,비교를 할 경우 출발지 주소 저장
- EDI : Extend Destination Index
- 복사,비교를 할 경우 목적지 주소 저장
Pointer Register
- ESP : Extend Stack Pointer
- 스택의 top(bottom grow면 bottom) 주소 저장
- EBP : Extend Base Pointer
- 스택의 시작점(기준점 바닥)을 저장하는 레지스터
EIP : Extend Instruction Pointer ( AKA. PC-Program Counter)
- 다음 명령어의 위치를 저장하는 레지스터
eflags 레지스터
앞의 e는 extend로 16bit에서 32bit으로 확장되었다는 의미, 즉 32bit짜리 레지스터다. 또한 이름에서 알 수 있뜻이 flag들을 모아놓은 레지스터다.
flag란 어떤 조건을 만족했을 때 깃발 올리고, 아니라면 내리는 것 깃발을 생각하면 이해가 쉽다. 각 깃발마다 의미가 있으며, eflags에 있는 flag들은 다음과 같은 의미로 분류 될 수 있다.
- 연산 결과 : ZF(연사결과 0,1 ),SF(최상위 비트),CF(빌림수 발생 유무)
- 시스템 제어: IP(외부 인터럽트 받을지 말지 선택 )
- 문자열 제어 : DF
- 이외에도 여러 flag들이 있지만 생략
이런 깃발들은 어던 동작을 수행을 할지 말지 결정하는 변수로써 기능하는 경우가 많으며, eflags의 flag는 대부분 어셈블리에서 비교나 조건문 처리 시 많이 사용된다. 예를 들면 다음과 같다.cmp eax, ebx // 두 레지스터의 값을 비교 -> eflags 레지스터의 ZF flag가 0 또는 1로 설정 je eual_label // ZF flag의 값을 보고 1이면 jump, 아니면 지나친다.
세그먼트 레지스터
세그먼트 디스크립터 테이블(SDT)의 인덱스를 나타낸다. 다음은 segment register와 연결된 segment discriptor가 가리키는 주소들이다.
- cs : 코드 세그먼트 시작 주소
- ss : 스택 세그먼트 시작 주소
- ds : 데이터 세그먼트 시작 주소
- es, fs, gs : 추가적인 데이터 세그먼트 시작 주소
caller와 callee
caller,callee 정의
caller : 다른 함수를 호출하는 함수
callee : 호출 받은 함수
함수호출(call)의 의미 : 진행중이던 caller의 상태를 백업하고 callee로 갔다가 다시 와서 백업한 상태를 되돌리고 그대로 이어서 진행
이때 caller의 상태는 그 시점의 register들의 값이다. 그리고 caller가 신경써서 저장하고 보존해야 하는 레지스터들ㅇ르 caller-saved-register라고 하는데, 이미 저장을 했기 때문에 callee는 이 레지스터들을 자유롭게 사용할 수 있다.
- 콜러가 저장하는 레지스터 (caller-saved-register) :
- caller가 사용하기 전에 반드시 백업해야 하는 레지스터, 콜리는 자유롭게 사용 가능하다.
- EAX, ECX, EDX
- 콜리가 저장하는 레지스터 (callee-saved-register) :
- EBX, ESI, EDI, EBP
Pinto project2의 test flow

출처 & 참고문헌
'SW 정글 일지' 카테고리의 다른 글
정글 개발일지 week10 핀토스의 마무리 (0) | 2024.05.28 |
---|---|
정글 개발일지week09 (1) | 2024.05.21 |
정글 개발일지 week07 (0) | 2024.05.02 |
정글 개발일지 week02 (0) | 2024.03.31 |
정글 에세이 : 과거와 앞으로의 정글 (1) | 2024.03.16 |