Fodo Dev
719 words
4 minutes
명령어 집합 구조에 대해 알아보자

TL;DR#

ISA(Instruction Set Architecture)는 명령어의 집합으로, 각 마이크로프로세서마다 사용하는 ISA가 다르다. 대표적인 ISA에는 x86-64, ARM, AVR 등이 있으며 다양한 이유는 모든 컴퓨터가 요구하는 성능이 다르기 때문이다.

x86-64#

고성능 프로세서를 설계하기 위해 사용된다. 하지만 많은 전력을 소모하며 발열도 상대적으로 심하다. 따라서 안정적으로 전력을 공급할 수 있는 Desktop, Laptop 등에 사용되며, 스마트폰이나 임베디드 기기와 같이 발열과 전력 소모가 적어야하는 기기에서는 사용하기 힘들다.

x86-64에서 64는 CPU가 한번에 64비트를 처리할 수 있다는 것이며 이처럼 한번에 처리할 수 있는 데이터의 크기를 WORD라고 부른다.

x86-64 아키텍쳐의 레지스터#

  • General Register

다목적으로 사용되는 레지스터. 종류가 나눠져있긴하나 개발자의 의도에 따라 다르게 사용될 수 있다.

이름설명
rax(accumulator register)함수의 반환 값
rbx(base register)x64에서는 주된 용도 없음
rcx(counter register)반복문의 반복 횟수, 각종 연산의 시행 횟수
rdx(data register)x64에서는 주된 용도 없음
rsi(source index)데이터를 옮길 때 원본을 가리키는 포인터
rdi(destination index)데이터를 옮길 때 목적지를 가리키는 포인터
rsp(stack pointer)사용중인 스택의 위치를 가리키는 포인터
rbp(stack base pointer)스택의 바닥을 가리키는 포인터
  • Segment Register

cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터가 존재하며, 각 레지스터의 크기는 16비트이다.

cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된 세그먼트 레지스터이다.

  • Instruction Pointer Register

CPU가 어느 부분의 코드를 실행할지 가리키는 레지스터. x64 아키텍처의 명령어 포인터 레지스터는 rip이며, 크기는 8바이트이다.

  • Flag Register

프로세스의 현재 상태를 나타내기 위해서 사용하는 레지스터. 깃발을 올리고 내리듯 비트들로 CPU의 상태를 표현한다.

이름설명
CF(Carry Flag)부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다.
ZF(Zero Flag)연산의 결과가 0일 경우 설정 됩니다.
SF(Sign Flag)연산의 결과가 음수일 경우 설정 됩니다.
OF(Overflow Flag)부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다.
명령어 집합 구조에 대해 알아보자
https://fodo.dev/posts/algorithm/instruction-set-architecture/
Author
NaN
Published at
2024-06-23