Register: 두 판 사이의 차이

youngwiki
편집 요약 없음
 
(같은 사용자의 중간 판 하나는 보이지 않습니다)
8번째 줄: 8번째 줄:


위의 대부분의 register들은 자유롭게 사용가능하지만, 특정 몇몇은 특정한 용도만을 위해서 사용된다.
위의 대부분의 register들은 자유롭게 사용가능하지만, 특정 몇몇은 특정한 용도만을 위해서 사용된다.
* %rip: program counter(instructor pointer)로 사용된다.
* %rip: program counter(instructor pointer)로 사용되며, 다음에 실행할 명령어의 메모리 주소를 저장한다.
* %rsp: stack pointer로 사용된다.
* %rsp: stack pointer로 사용되어, 현재 스택의 "Top" 위치를 가리킨다.


==Operand types==
==Operand types==

2025년 4월 10일 (목) 01:47 기준 최신판

상위 문서: 컴퓨터 시스템

개요

Registers in x86-64

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

  • %rip: program counter(instructor pointer)로 사용되며, 다음에 실행할 명령어의 메모리 주소를 저장한다.
  • %rsp: stack pointer로 사용되어, 현재 스택의 "Top" 위치를 가리킨다.

Operand types

Assembly에는 기본적으로 아래의 3개의 기본 자료형이 존재한다.

  • Intermediate: 상수 정수 값을 의미한다. address와 구분하기 위해 상수값 앞에 $를 붙여서 표시한다.
    • ex) $0x400, $-533
  • Register: register들을 의미한다.
    • ex) %rax, %r13
  • Memory: 메모리 내의 address가 지정하는 consecutive byte value를 의미한다.
    • ex) (%rax), 0x1000[1]

Names for part of Register

각각의 register는 8byte이지만 우리는 또한 해당 register의 lower 4byte, 2byte, 혹은 1byte에 접근할 수 있다.
이때 8byte 접근은 longlong, 4byte 접근은 long이나 int, 2byte 접근은 short, 1바이트 접근은 char 자료형을 수정하고자 하는 것이다.

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들을 직접 수정할 수도 없다.

각주

  1. mem에 해당하는 정수에는 $ 표시를 사용하지 않는다.