반응형

본 글은 책 "혼자 공부하는 컴퓨터 구조+운영체제" 의 Chapter 3를 읽고 정리한 내용입니다.

 

03-1 소스 코드와 명령어

고급 언어와 저급 언어

고급 언어: 사람이 이해하고 작성하기 쉽게 만들어진 언어

저급 언어: 컴퓨터가 직접 이해하고 실행할 수 있는 언어

⇒ 컴퓨터가 이해하기 위해서는 우리가 작성하는 고급 언어가 저급 언어로 변환되어야 함

 

저급 언어 종류

  • 기계어: 0과 1의 명령어 비트로 이루어진 언어
  • 어셈블리어: 0과 1로 표현된 명령어(기계어)를 읽기 편한 형태로 번역한 언어
 

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

고급 언어가 저급 언어로 변환되는 방식

  • 컴파일 방식
  • 인터프리터 방식

 

컴파일 언어

컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어 (C언어)

소스 코드를 처음부터 끝까지 저급 언어로 컴파일하고 이 과정에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패

소스 코드는 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 함
 

인터프리터 언어

소스 코드가 한줄씩 실행되는 고급 언어 (Python)

  • 인터프리터: 소스 코드를 한줄씩 조급 언어로 변환하여 실행해주는 도구
  • N번째 줄에 문법 오류가 있더라도 N-1번째 줄까지는 코드가 수행됨

 

 

 

03-2 명령어의 구조

연산 코드와 오퍼랜드

명령어는 연산 코드와 오퍼랜드(operand)로 구성되어 있음

  • 연산 코드 : 명령어가 수행할 연산 (연산자)
  • 오퍼랜드 : 연산에 사용할 데이터가 저장된 위치 (피연산자)

명령어 예시

연산코드 오퍼랜드
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1

 

오퍼랜드(주소 필드)

연산에 사용할 데이터 또는 데이터가 저장된 위치

주로 메모리 주소나 레지스터 이름이 담김

mov eax, 0 ---> 오퍼랜드가 두 개인 경우
pop rbp    ---> 오퍼랜드가 한 개인 경우
ret        ---> 오퍼랜드가 없는 경우
  • 2-주소 명령어: 오퍼랜드가 두 개인 명령어
  • 1-주소 명령어: 오퍼랜드가 한 개인 명령어
  • 0-주소 명령어: 오퍼랜드가 하나도 없는 경우

 

연산 코드

명령어가 수행할 연산을 의미하고 크게 4가지 유형이 있음

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

 

주소 지정 방식

오퍼랜드 필드에 데이터를 담게 되면 오퍼랜드 필드로 표현할 수 있는 정보의 크기가 제한되기 때문에 메모리 주소를 주로 사용

EX) 명령어(연산코드+오퍼랜드)의 크기가 16비트일 때, 연산 코드 필드가 4비트인 2-주소 명령어

  • 연산코드 4비트
  • 오퍼랜드는 필드당 (16-4)/2 = 6비트, 표현할 수 있는 정보의 가짓수가 $2^6$=64밖에 되지 않음

 

오퍼랜드 필드 안에 메모리 주소가 담긴다면, (예를 들어 한 주소에 16비트를 저장) 표현할 수 있는 정보는 $2^{16}$으로 확 커짐

  • 유효주소 : 연산 코드에 사용할 데이터가 저장된 위치
  • 주소 지정 방식: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법으로 5가지 방법 소개

 

즉시 주소 지정 방식

연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식

표현할 수 있는 데이터의 크기는 작아지지만 데이터를 메모리나 레지스터에서 찾는 과정이 없기때문에 빠름

직접 주소 지정 방식

오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식

유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수 만큼 줄어듦

간접 주소 지정 방식

유효 주소의 주소를 필드에 명시

직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 넓어짐

다만 두 번의 메모리 접근이 필요하기 때문에 좀 더 느림

레지스터 주소 지정 방식

연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시 (직접 주소 지정 방식과 비슷)

CPU 내부에 있는 레지스터에 접근하므로 직접 주소 지정 방식보다 빠름

레지스터 간접 주소 지정 방식

연산에 사용할 데이터를 메모리에 저장하고 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시

메모리 접근하는 횟수가 한번으로 줄어듬

 

참고

 


1. 책 "혼자 공부하는 컴퓨터 구조+운영체제"
2. 유튜브 "혼자 공부하는 컴퓨터 구조 + 운영체제"

 
반응형

'OS' 카테고리의 다른 글

캐시메모리  (0) 2024.07.07
메모리  (0) 2024.07.05
CPU 성능 향상 기법  (0) 2024.07.02
데이터  (0) 2024.06.27
컴퓨터 구조  (0) 2024.06.25

+ Recent posts