컴퓨터 구조 Chapter 03

김연준·2025년 7월 5일
post-thumbnail

명령어

언어 번역 방식, 주소 지정 방식 정리

고급 언어와 저급 언어

우리가 작성하는 소스코드는 컴퓨터가 직접 이해하지 못함.

  • 우리는 고급 언어(C, C++, Java, Python 등)를 사용하고,
  • 컴퓨터는 저급 언어(기계어, 어셈블리어)만 이해하기 때문

기계어와 어셈블리어

  • 기계어:
    2진수 혹은 16진수로 구성된 컴퓨터가 직접 이해하는 명령어
    → 사람이 해독하기 어려움

  • 어셈블리어:
    기계어를 사람이 조금 더 이해하기 쉬운 형태로 표현한 저급 언어
    → 어셈블리어를 알면 프로그램이 어떻게 동작하는지를 근본적인 수준에서 이해할 수 있음


소스 코드 번역 방식

소스코드를 컴퓨터가 이해할 수 있도록 저급 언어로 변환하는 방식은 두 가지가 있다.

1. 컴파일 방식

  • 전체 소스 코드를 한 번에 번역해서 실행
  • 번역된 결과: 목적 코드(object code)
  • 예: C 언어

✅ 장점:

  • 전체를 컴파일해두므로 실행 속도가 빠름

❌ 단점:

  • 컴파일 과정에서 오류가 하나라도 있으면 실행 불가

2. 인터프리터 방식

  • 소스 코드를 한 줄씩 번역하면서 실행
  • 예: Python

✅ 장점:

  • 오류가 있는 줄을 실행하기 전까지는 나머지 코드가 실행됨

❌ 단점:

  • 매번 해석하며 실행하기 때문에 속도는 느림

⚠️ 고급 언어는 컴파일 언어 vs 인터프리터 언어처럼 명확히 나뉘지 않음.
많은 언어가 두 속성을 모두 갖거나 전환 가능하기 때문


명령어 구조

컴퓨터 명령어는 다음 두 부분으로 구성됨.

  • 연산 코드 (Opcode): 어떤 연산을 할지 정의
  • 오퍼랜드 (Operand): 연산에 사용할 데이터

오퍼랜드는 연산의 대상이며, 데이터, 메모리 주소, 레지스터 등이 올 수 있음.
그래서 오퍼랜드 필드를 주소 필드라고도 부름.


주소 지정 방식 (Addressing Modes)

오퍼랜드 필드에 연산 대상의 주소나 값을 명시하는 방식.
대표적으로 다섯 가지 방식

1. 즉시 주소 지정 방식 (Immediate Addressing)

  • 데이터를 오퍼랜드 필드에 직접 명시
  • 가장 단순하고 빠르지만, 표현 가능한 데이터 크기에 제한이 있음

2. 직접 주소 지정 방식 (Direct Addressing)

  • 유효 주소를 직접 명시
  • 표현 가능한 주소의 범위가 연산 코드 길이에 제한받음

3. 간접 주소 지정 방식 (Indirect Addressing)

  • 유효 주소의 주소를 오퍼랜드 필드에 명시
  • 표현 범위는 넓지만, 메모리 접근이 2회 필요하여 느림

4. 레지스터 주소 지정 방식 (Register Addressing)

  • 데이터를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 메모리보다 빠름
  • 그러나 사용 가능한 레지스터 수에 제한

5. 레지스터 간접 주소 지정 방식 (Register Indirect Addressing)

  • 데이터를 메모리에 저장하고,
    그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 간접 주소 지정과 유사하지만, 메모리 접근은 1번만 필요

연산 코드의 유형

명령어의 연산 코드는 다음과 같은 유형으로 나뉨.

  1. 데이터 전송 (Data Transfer)
  2. 산술/논리 연산 (Arithmetic/Logical Operations)
  3. 제어 흐름 변경 (Control Flow)
  4. 입출력 제어 (I/O Control)
profile
Live a life you will remember

0개의 댓글