컴퓨터 구조 &운영체제/컴퓨터구조 + 운영체제

명령어

busy맨 2024. 2. 2. 15:45

1. 소스코드와 명령어

1) 명령어

  • 컴퓨터는 명령어를 처리하는 기계
  • 명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보
  • 개발자가 C++, Python과 같은 프로그래밍 언어로 작성한 소스코드는 컴퓨터 내부에서 명령어로 변환됨

2) 고급 언어와 저급 언어

  • 고급 언어(high-level programming language)
    • 사람이 이해하고 작성하기 쉽게 만들어진 언어
  • 저급 언어(low-level programming language)
    • 컴퓨터가 직접 이해하고 실행할 수 있는 언어
    • 저급 언어에는 기계어와 어셈블리어가 존재
  • 기계어(machine code)
    • 0과 1의 명령어 비트로 이루어진 언어
    • 사람이 읽으면 의미를 이해하기 어려움 → 어셈블리어의 등장
  • 어셈블리어(assembly language)
    • 기계어를 읽기 편한 형태로 번역한 언어
    • 컴퓨터가 프로그램을 어떤 과정으로 실행하는지를 추적하고 관찰 가능

어셈블리어 예시

3) 컴파일 언어와 인터프리터 언어

  • 고급 언어로 작성한 소스 코드는 컴파일과 인터프리트 방식으로 저급 언어로 변환됨
  • 컴파일 언어
    • 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
      • Ex) C++
    • 컴파일러가 소스 코드 내에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패
    • 컴파일이 성공적으로 수행되면 소스코드는 저급 언어로 변환된 코드인 목적 코드(object code)가 됨
      • 컴파일(compile)
        • 컴파일 언어로 작성된 소스 코드 전체가 저급 언어로 변환되는 과정
      • 컴파일러(compiler)
        • 컴파일을 수행하는 도구
  • 인터프리터 언어
    • 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
      • Ex) Python
    • 컴파일 언어와 달리, 인터프리터 언어는 소스 코드를 한 줄씩 실행하기 때문에 오류 발생 전까지 올바르게 수행됨
    • 일반적으로 인터프리터 언어는 컴파일 언어보다 느림
      • 인터프리터(interpreter)
        • 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해주는 도구

4) 목적 파일, 실행 파일

  • 목적 파일
    • 목적 코드로 이루어진 파일
  • 실행 파일
    • 실행 코드로 이루어진 파일
    • 윈도우의 .exe 확장자
  • 목적 파일이 실행 파일이 되기 위해서 링킹(linking)을 거쳐야함

 

2. 명령어의 구조

1) 연산 코드와 오퍼랜드

  • 명령어는 연산 코드와 오퍼랜드로 구성
  • 연산 코드(operation code)
    • 명령어가 수행할 연산
    • 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어
    • 연산 코드의 종류는 CPU마다 다름
  • 오퍼랜드(operand)
    • 연산에 사용할 데이터 & 연산에 사용할 데이터가 저장된 위치
  • 오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있음
  • 보통은 데이터를 직접 명시하기 보다 연산에 사용할 데이터가 저장된 위치를 저장
    • 메모리 주소나 레지스터 이름을 담음

 

2. 주소 지정 방식

  • 명령어의 길이가 제한적이므로 정보의 용량을 늘리기 위해 오퍼랜드 필드에 주소를 할당 
    • 연산의 대상이 되는 데이터가 저장된 위치를 유효 주소(effective address)라고 함
  • 주소 지정 방식(addressing mode)
    • 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법

 

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

  • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
  • 표현할 수 있는 데이터의 크기가 작아짐
  • 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 다른 방식들보다 빠름

즉시 주소 지정 방식

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

  • 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
  • 즉시 주소 지정 방식보다 오퍼랜드 필드에서 표현할 수 있는 데이터의 크기가 커짐
  • 그러나 여전히 유효 주소에 제한이 생김

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

  • 유효 주소의 주소를 오퍼랜드 필드에 명시
  • 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어짐
  • 두 번의 메모리 접근이 필요하여 앞서 설명한 주소 지정 방식보다 느림

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

  • 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
  • CPU 외부의 메모리보다 CPU 내부의 레지스터에 접근하는 것이 더 빠름
  • 표현할 수 있는 레지스터 크기에 제한이 생길 수 있음

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

  • 연산에 사용할 데이터를 메모리에 저장하고, 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 간접 주소 지정 방식과 비슷하지만 CPU 외부의 메모리에 접근하는 횟수가 한 번
    • 따라서 간접 주소 지정 방식보다 빠름

'컴퓨터 구조 &운영체제 > 컴퓨터구조 + 운영체제' 카테고리의 다른 글

CPU 성능 향상 기법  (1) 2024.02.06
CPU의 작동 원리  (0) 2024.02.05
데이터  (1) 2024.01.22
CPU Scheduling  (0) 2023.08.29
프로세스  (0) 2023.08.14