[Assembly] 어셈블리어 3 - 범용 레지스터

gunha·2024년 10월 7일
0

Assembly

목록 보기
4/5

어셈블리어

  • 기본적으로 위에서부터 아래로 실행된다.
  • 대소문자를 구분하지 않는다.
  • 어셈블리어는 기계의 움직임을 정하는 언어이기 때문에 size를 정확히 써야한다. (size가 틀릴 경우 아예 실행이 안된다.)

mov reg,값

  • 값을 또 넣으면 덮어 씌울 수 있다.

mov reg, reg

  • 레지스터의 값으로 값을 덮어쓴다.
  • ex) mov eax, ebx
    • eax에 ebx값을 넣는다.
    • 레지스터의 크기가 서로 같아야 한다.(양쪽 모두)
    • 공간의 크기는 EAX(4BYTE), AX(2BYTE) , AH/AL(1BYTE)이다.

어셈블리어의 숫자

  • 어셈블리어에서 숫자는 기본적으로 16진수로 들어간다.
  • 10을 표현하려고 할경우 a만 쓰지 말고, 0a라고 명확하게 표현해야한다. (ollydbg의 경우 자동 변환)

AX / AH / AL

  • 이전에 16비트 시절에 사용했던 저장 방식이다.
  • AX는 전체 2바이트(16비트) 전체를 뜻한다.
  • AL는 전체 중 1바이트의 일의 자리를 뜻한다.
  • AH는 십의 자리를 뜻한다.

32비트의 경우(4byte)

  • 전체의 이름을 EAX라고 부른다.
  • 낮은 자리의 2byte를 AX라는 이름으로 사용할 수 있다.
  • AX의 높은 곳을 AH, 낮은 곳을 AL로 사용한다.
  • ex) 1234567을 EAX에 저장 시킬 경우
    • MOV EAX, 12D687
    • EAX [00 12 D6 87]로 저장 된다.
    • AX는 [D6 87]
    • AH는 [D6]
    • AL는 [87]

64비트의 경우

  • RAX라고 불린다.

범용 레지스터

범용 레지스터(General Purpose Register, GPR)는 CPU에서 다양한 용도로 사용할 수 있는 레지스터이며, IA-32 아키텍처에서는 다음과 같은 범용 레지스터가 있다.

IA-32 범용 레지스터

  • EAX (Accumulator Register): 주로 산술 연산 및 I/O 작업에 사용된다. 많은 명령에서 결과값을 저장한다.
  • EBX (Base Register): 주소 계산을 위한 기본 레지스터로 사용된다. 배열이나 데이터 구조에 대한 포인터를 저장하는 데 유용하다.
    ECX (Counter Register): 반복 작업이나 문자열 처리를 위한 카운터로 사용된다. LOOP 명령어와 함께 자주 사용된다.
    EDX (Data Register): 산술 연산의 결과를 저장하거나, 확장된 곱셈/나눗셈에서 사용된다. I/O 작업에서도 사용될 수 있다.
    ESI (Source Index):문자열 처리에서 소스 데이터의 주소를 저장하는 데 사용된다. MOVS, CMPS, SCAS 명령어와 함께 자주 사용된다.
    EDI (Destination Index):문자열 처리에서 목적지 주소를 저장하는 데 사용된다. 소스 인덱스와 함께 문자열 작업에 사용된다.
    EBP (Base Pointer): 함수 호출 시 스택 프레임의 기준을 제공하는 데 사용된다. 로컬 변수와 함수 매개변수에 대한 포인터 역할을 한다.
    ESP (Stack Pointer): 현재 스택의 최상단을 가리키는 레지스터이다. 스택 관련 작업에 사용되며, 함수 호출과 리턴 시 자동으로 업데이트된다.

범용 레지스터의 특징

  • 다목적 사용: 범용 레지스터는 다양한 데이터 유형을 저장할 수 있으며, 연산에 자유롭게 사용할 수 있다.
  • 속도: CPU 내부에 위치하여 매우 빠른 속도로 데이터를 처리할 수 있다.
  • 가시성: 어셈블리 프로그래밍 시 레지스터를 직접 조작할 수 있어, 프로그래머가 메모리보다 더 효율적으로 데이터 처리를 할 수 있게 해준다.

0개의 댓글