Register: 두 판 사이의 차이

youngwiki
편집 요약 없음
27번째 줄: 27번째 줄:
* '''%CF''' (Carry Flag): 부호 없는 덧셈/뺄셈에서 자리올림/자리내림 발생 시 1로 설정
* '''%CF''' (Carry Flag): 부호 없는 덧셈/뺄셈에서 자리올림/자리내림 발생 시 1로 설정
* '''%OF''' (Overflow Flag): 부호 있는 연산에서 overflow 발생 시 1로 설정
* '''%OF''' (Overflow Flag): 부호 있는 연산에서 overflow 발생 시 1로 설정
위는 특정한 조건 분기나 연산 결과 판별 등을 위해 사용되는 '''flag register'''들이다. 이들은 단순히 true/false만 나타내면 되므로 크기는 1bit이다. 만약 해당 register의 값이 1이면 해당 조건을 만족, 0이면 조건이 만족되지 않음을 나타낸다. 또한 flag register들은 특정한 연산 후에 '''automatically update'''된다. 예를 들면 add, sub, and, or 등은 플래그를 변경하지만, mov, lea는 플래그에 영향을 주지 못한다. Flag register는 가장 최근 연산의 결과 상태를 저장하여 조건 분기나 연산 결과 판별등을 위해 사용되는 것이다.
위는 특정한 조건 분기나 연산 결과 판별 등을 위해 사용되는 '''flag register'''들이다. 이들은 단순히 true/false만 나타내면 되므로 크기는 1bit이다. 만약 해당 register의 값이 1이면 해당 조건을 만족, 0이면 조건이 만족되지 않음을 나타낸다. 또한 flag register들은 특정한 연산 후에 '''automatically update'''된다. 예를 들면 add, sub, and, or 등은 플래그를 변경하지만, mov, lea는 플래그에 영향을 주지 못한다. 이 때문에 flag register는 최신 연산 결과만을 유지하며, 사용자가 해당 register들을 직접 수정할 수도 없다.


==각주==
==각주==
[[분류:컴퓨터 시스템]]
[[분류:컴퓨터 시스템]]

2025년 4월 1일 (화) 00:23 판

상위 문서: 컴퓨터 시스템

개요

Registers in x86-64

위의 대부분의 register들은 자유롭게 사용가능하지만, 특정 몇몇은 특정한 용도만을 위해서 사용된다.

  • %rip: program counter(instructor pointer)로 사용된다.
  • %rsp: stack pointer로 사용된다.

Names for part of Register

각각의 register는 8byte이지만 우리는 또한 해당 register의 lower 4byte, 2byte, 혹은 1byte에 접근할 수 있다.

Rules on the Use of Registers

Register들을 사용하기 위해서는 몇가지 규칙이 존재한다.

  • Calling convention
    • 함수의 1st, 2nd, 3rd argument는 반드시 %rdi, %rsi, %rdx로 pass된다.
    • Return 값은 %rax값이 pass된다.

Flag registers

%rip와 %rsp 말고도 x86-64에는 아래와 같이 특별한 레지스터들이 추가로 존재한다.

  • %ZF (Zero Flag): 연산 결과가 0이면 1로 설정됨
  • %SF (Sign Flag): 연산 결과가 음수이면 1로 설정됨
  • %CF (Carry Flag): 부호 없는 덧셈/뺄셈에서 자리올림/자리내림 발생 시 1로 설정
  • %OF (Overflow Flag): 부호 있는 연산에서 overflow 발생 시 1로 설정

위는 특정한 조건 분기나 연산 결과 판별 등을 위해 사용되는 flag register들이다. 이들은 단순히 true/false만 나타내면 되므로 크기는 1bit이다. 만약 해당 register의 값이 1이면 해당 조건을 만족, 0이면 조건이 만족되지 않음을 나타낸다. 또한 flag register들은 특정한 연산 후에 automatically update된다. 예를 들면 add, sub, and, or 등은 플래그를 변경하지만, mov, lea는 플래그에 영향을 주지 못한다. 이 때문에 flag register는 최신 연산 결과만을 유지하며, 사용자가 해당 register들을 직접 수정할 수도 없다.

각주