Chapter 3. 명령어

2025. 3. 13. 10:48·독서/[ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]

소스코드와 명령어

컴퓨터는 명령어를 처리하는 기계로, 컴퓨터에게 명령을 내리기 위한 언어는 크게 고급 언어와 저급 언어가 있다. 고급 언어는 C, C++, Python과 같은 흔히 프로그래밍 언어라고 불리우는 언어들이 해당한다. 이는 컴퓨터가 아닌 사람이 쉽게 이해하고 작성하기 위해 만들어졌다. 저급 언어는 크게 어셈블리어와 기계어로 나뉘며, 컴퓨터가 이해하고 실행할 수 있는 언어이다. 고급 언어를 저급 언어로 변환하는 과정은 컴파일과 인터프리트 과정이 있다.

 

컴파일

컴파일은 컴파일러에 의해 고급 언어 → 전처리 → 컴파일 → 어셈블 과정을 거쳐 소스 코드 전체를 한 번에 저급 언어로 이루어진 목적 코드(Object Code)로 변환한다.

전처리와 링킹과정에 대해 부연설명을 하자면, 전처리 과정의 경우, #include와 같은 매크로 처리된 부분이나 주석을 없애는 과정을 거치는데, main.c 소스 코드에서 #include <stdio.h>와 같은 헤더 파일을 include한 경우 해당 헤더파일 자체를 main.c 코드에 복사하는 과정을 거친다.

링킹 과정의 경우, 앞서 컴파일 과정을 거쳐 목적 코드로 변환한다고 했는데 이것이 실행 가능한 실행 파일이 되기 위해서는 해당 과정을 거쳐 실행 파일로 변환해야 한다. 이는 전처리 과정에서 포함된 함수의 선언부가 아닌 stdio.c 파일이 오브젝트 코드가 된 stdio.o 파일과 같이 외부에서 구현된 함수의 정의와 같은 내용이 담긴 오브젝트 코드들을 연결하는 과정이다.

 

(참고)

 

컴파일(Compile)에 대한 이해

서론 C, C++, Java 프로그래밍을 해봤으면 작성한 소스 코드를 빌드(Build) 혹은 컴파일(Compile)해서 실행해봤거나 코드를 잘못 작성하여 컴파일 에러가 났던 경험이 있을 것이다. 정확하게 컴파일이

bradbury.tistory.com

 

인터프리트

인터프리트 과정은 인터프리터에 의해 소스 코드의 한 줄씩 저급 언어로 변환하며 실행된다. 따라서, 소스 코드 내에 오류가 하나라도 있으면 컴파일이 불가능한 컴파일 언어와는 달리 인터프리터 언어는 N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 정상적으로 수행된다.

컴파일 언어에는 대표적으로 C가 있으며, 인터프리터 언어로는 Python이 있다. 그러나 현대의 많은 프로그래밍 언어들은 둘의 경계가 모호하다.


명령어의 구조

컴퓨터 속 명령어는 mov w0, 1과 같이 연산 코드와 오퍼랜드로 구성되어 있다.

 

오퍼랜드

오퍼랜드는 연산에 사용할 데이터나 연산에 사용할 데이터가 저장된 위치를 의미한다. 따라서, 메모리 주소나 레지스터 이름이 담기기하며, 주소 필드라고도 불린다. 오퍼랜드는 명령어 안에 하나도 없을 수도 있으며, 1~3개 등 여러 개가 있을 수도 있다.

 

연산 코드

연산 코드는 명령어가 수행할 연산을 의미하며, 연산 필드에는 다음과 같은 코드 유형이 존재한다.

  1. 데이터 전송: MOVE, STORE, LOAD(FETCH), PUSH, POP
  2. 산술.논리 연산: ADD/SUBTRACT, AND/OR, COMPARE
  3. 제어 흐름 변경: JUMP, CONDITIONAL JUMP, HALT, CALL, RETURN
  4. 입출력 제어: READ(INPUT), WRITE(OUTPUT), START IO, TEST IO

주소 지정 방식

오퍼랜드 필드에 직접 담을 경우, 명령어의 길이가 제한적이기 때문에 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수도 적어질 수밖에 없다. 하지만, 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는다면 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다. 이때 오퍼랜드 필드에 데이터가 저장된 위치를 지정할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식(addressing mode)라고 하며, 여기에는 크게 다섯 가지 방식이 있다.

 

즉시 주소 지정 방식(Immediate addressing mode)

즉시 주소 지정 방식은 연산에 사용할 데이터를 직접 오퍼랜드 필드에 명시하는 방식으로 표현할 수 있는 데이터의 크기가 작아진다는 단점이 있지만 데이터를 메모리나 레지스터로부터 찾는 과정이 없어 가장 빠르다.

 

직접 주소 지정 방식(Direct addressing mode)

직접 주소 지정 방식은 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식이다. 이는 데이터를 오퍼랜드 필드에 직접 명시할 때보다는 데이터 크기가 더 커졌지만 여전히 유효 주소의 범위가 연산 코드의 비트 수만큼 줄어든다.

ex) 16bit 명령어에서 연산 코드의 길이가 4bit & 2-주소 명령어일 경우, (16-4)/2=6bit로 주소를 64가지 밖에 표현하지 못한다는 한계점이 있다.

 

간접 주소 지정 방식(Indirect addressing mode)

간접 주소 지정 방식은 오퍼랜드 필드에 유효 주소가 담긴 메모리의 주소를 명시하는 방식이다. 이는 유효 주소를 표현하는 범위가 커졌지만 두 번의 메모리 접근이 필요하기 때문에 다른 방식에 비해 속도가 느린 방식이다.

 

레지스터 주소 지정 방식(Register addressing mode)

레지스터 주소 지정 방식은 직접 주소 방식과 유사하게 오퍼랜드 필드에 레지스터의 이름을 직접 명시하는 방식이다. 문제점 또한 직접 주소 지정 방식과 유사하게 레지스터를 표현하는 범위에 제한이 있다는 점이며, 레지스터에 접근하기 때문에 직접 주소 지정 방식보다는 빠르다.

 

레지스터 간접 주소 지정 방식(Register indirect addressing mode)

레지스터 간접 주소 지정 방식은 간접 주소 지정 방식과 유사하게 오퍼랜드 필드에 메모리의 유효 주소가 담긴 레지스터의 이름을 명시하는 방식이다. 문제점 또한 간접 주소 지정 방식과 유사하게 두 번 메모리 접근이 발생한다는 점이 있지만, 레지스터에 한 번, 메모리에 한 번 접근하기 때문에 간접 주소 지정 방식보다는 빠르다.

 

이외에도 특정 레지스터를 이용한 주소 지정 방식이 존재한다.


참고 자료:

강민철. 『혼자 공부하는 컴퓨터 구조 + 운영체제』. 한빛미디어, 2022.

'독서 > [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]' 카테고리의 다른 글

Chapter 6. 메모리와 캐시메모리  (0) 2025.03.20
Chapter 5. CPU 성능 향상 기법  (0) 2025.03.19
Chapter 4. CPU의 작동 원리  (0) 2025.03.16
Chapter 2. 데이터  (0) 2025.03.10
Chapter 1. 컴퓨터 구조 시작하기  (0) 2025.03.09
'독서/[ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]' 카테고리의 다른 글
  • Chapter 5. CPU 성능 향상 기법
  • Chapter 4. CPU의 작동 원리
  • Chapter 2. 데이터
  • Chapter 1. 컴퓨터 구조 시작하기
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    bilateral blur
    collision
    물리 기반 시뮬레이션
    실수
    screen-space rendering
    wave simulation
    OpenGL
    surface turbulence
    액체 시뮬레이션
    상수
    파동 난류
    cloth simulation
    RAM
    GLSL
    Flip
    유체 시뮬레이션
    시스템 프로그래밍
    컴퓨터 구조
    fluid implicit particle
    pbd
    jump table
    그리드 기반 방법
    screen space fluid rendering
    정수 승격
    fluid simulation
    입자 기반 방법
    C언어
    narrow range filter screen-space fluid rendering
    명령어
    position based dynamics
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
Chapter 3. 명령어
글쓰기
상단으로

티스토리툴바