Menu
Coddy logo textTech

명령어의 작동 원리

Coddy Assembly 여정의 기초 섹션에 포함된 레슨 — 45개 중 4번째.

CPU가 명령어를 하나씩 실행한다는 것을 알고 계실 것입니다. 하지만 CPU는 다음에 어떤 명령어를 실행해야 할지 어떻게 알까요? 명령어는 어디에 저장될까요? 그리고 명령어는 실제로 어떻게 생겼을까요?

명령어는 숫자입니다.

이것은 컴퓨터에 관한 근본적인 진리입니다. 모든 것은 숫자입니다. 여러분이 다루는 데이터(숫자 42와 같은)는 숫자입니다. 데이터가 위치한 주소(1000과 같은)도 숫자입니다. 그리고 명령어 그 자체(mov, add, cmp와 같은) 또한 숫자입니다.

mov rax, 5와 같은 어셈블리 코드를 작성하면, 어셈블러는 이 사람이 읽을 수 있는 텍스트를 CPU가 이해하는 숫자로 변환합니다. 이 숫자를 명령어 코드(instruction code)라고 합니다.

명령어는 어디에 저장되나요?

명령어는 데이터와 마찬가지로 메모리에 저장됩니다. 명령어를 위한 특별한 장소는 없습니다. 메모리는 다음 두 가지를 모두 보유합니다:

  • 데이터 (숫자, 문자, 배열)
  • 명령어 (프로그램 그 자체)

CPU는 그 차이를 알지 못합니다. 이것은 단순히 Program Counter가 가리키는 메모리 주소에 있는 내용을 읽을 뿐입니다. 여러분은 Lesson 0.1에서 PC에 대해 간략하게 배웠습니다. 이제 이것이 정확히 어떻게 작동하는지 이해할 시간입니다.

프로그램 카운터(명령 포인터라고도 함)는 CPU 내부의 특수 레지스터입니다. 이것의 유일한 역할은 다음에 실행할 명령어의 메모리 주소를 보유하는 것입니다.

인출-실행 사이클:

CPU는 이 세 단계를 영원히 반복합니다:

단계수행 내용
1. FETCH (인출)PC에 있는 주소의 명령어를 읽습니다
2. EXECUTE (실행)해당 명령어를 수행합니다
3. ADVANCE (진행)PC를 다음 명령어로 이동시킵니다

간단한 예시:

PC = 1000인 경우, CPU는:

  • 주소 1000에서 명령어를 가져옵니다
  • 그것을 실행합니다
  • PC를 다음 주소(1000 + 명령어 크기)로 이동시킵니다

그런 다음 새로운 PC 값으로 반복됩니다.

명령어의 구성:

모든 명령어는 두 부분으로 구성됩니다:

부분수행하는 작업예시
Opcode (명령어 코드)무엇을 할 것인가mov, add, cmp
Operands (피연산자)무엇을 대상으로 할 것인가rax, 5, [result]

일부 명령어는 하나의 피연산자를 가집니다 (1을 더하는 inc rax와 같이). 일부는 두 개를 가집니다 (mov rax, 5와 같이). 일부는 세 개를 가집니다 (일부 아키텍처의 add rax, rbx, rcx와 같이).

직접 해보기

이 레슨에는 코드 챌린지가 없습니다.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨