[컴퓨터구조] 소스 코드와 명령어

2024. 3. 8. 02:00· 컴퓨터 구조

소스 코드와 명령어



고급 언어와 저급 언어

고급 언어: 개발자가 읽고 쓰기 편하게 만들어진 언어
저급 언어: 컴퓨터가 명령을 이해하고 실행할 수 있도록 만들어진 언어

저급 언어

 

- 기계어와 어셈블리어가 있음

- 기계어는 0과 1로 이루어진 명령어로 구성된 저급 언어이다.
- 어셈블리어는 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어이다.

어셈블리어



고급 언어(c, c++ python, java 등)


고급 언어가 저급 언어로 변환되는 방식은 두 가지가 있다. 컴파일과 인터프리트 방식

컴파일 언어

고급 언어 -> 컴파일 -> 저급언어
소스 코드 -> 컴파일러 -> 목적 코드

- 컴파일 언어로 작성된 소스 코드는 컴파일러에 의해 저급 언어로 변환되고 (이 과정을 컴파일이라고 한다.) 컴파일 결과로 저급 언어인 목적 코드가 생성된다. (한 줄씩 실행되는 것이 아니라 한 번에 컴파일)

인터프리트 언어
- 인터프리터에 의해 한 줄씩 실행
- 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요가 없다.

컴파일 언어: 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음
인터프리터 언어: 소스 코드 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행

세상 모든 프로그래밍 언어가 컴파일 언어와 인터프리트 언어로 구분되는가?


- No, 경계가 애매한 경우가 있다. 흑과 백처럼 양분되는 개념이라기보다는 컴파일 방식과 인터프리터 방식이 있는데 이는 고급 언어가 저급 언어로 변환되는 대표적인 방식이라고 기억하는 게 좋다.

명령어의 구조

- 무엇을 대상으로 무엇을 실행하라.
- 기계어, 어셈블리어도 명령어이다. 
- 명령어는 연산 코드와 오퍼랜드로 구성된다.

연산 코드: 수행할 연산
오퍼랜드: 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치(주소 필드)

아래 주소 명령어 이해를 돕기위한 사진

오퍼랜드가 없는 경우 (0-주소 명령어)
연산 코드

오퍼랜드가 한 개인 경우 (1-주소 명령어)
연산 코드 오퍼랜드

오퍼랜드가 두 개인 경우 (2-주소 명령어)
연산 코드 오퍼랜드 오퍼랜드

오퍼랜드가 세 개인 경우 (3-주소 명령어)
연산코드 오퍼랜드 오퍼랜드 오퍼랜드

연산 코드: 수행할 연산
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어

* 연산코드의 종류와 생김새는 cpu마다 다르다.

대표적인 연산 코드의 종류

데이터 전송

* MOVE: 메모리 옮기기
* STORE: 메모리에 저장
* LOAD (FETCH): 메로리에서 CPU로 데이터를 가져오기
* PUSH: 스택에 데이터 저장
* POP: 스택 최상단 데이터 가져오기

산술/논리 연산

* ADD / SUBTRACT / MULTIPLY / DIVIDE: 덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행해라
* INCREMENT / DECREMENT: 오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
* AND / OR / NOT: AND / OR / NOT 연산 수행해라
* COMPARE: 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라

제어 흐름 변경

* JUMP: 특정 주소로 실행 순서를 옮겨라
* CONDITIONAL JUMP: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
* HALT: 프로그램 실행을 멈춰라
* CALL: 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
* RETURN: CALL을 호출할 때 저장했던 주소로 돌아가라

입출력제어

* READ (INPUT): 특정 입출력 장치로부터 데이터를 읽어라
* WRITE (OUTPUT): 특정 입출력 장치로 데이터를 써라
* START IO: 입출력 장치를 시작해라
* TEST IO: 입출력 장치의 상태를 확인해라

저장된 위치를 사용하는 이유

- 명령어에서 표현할 수 있는 데이터의 크기가 제한되어있기 때문이다.
- 16비트 기준, 3-주소 명령어에서 표현할 수 있는 데이터의 크기는 2^4
- 주소를 가져오면 2^16을 표현할 수 있다. (오퍼랜드에 주소 표기, 주소값에는 2^16 크기만큼의 데이터 저장)

명령어 주소 지정 방식

유효 주소(effective address)
- 연산에 사용할 데이터가 저장된 위치

명령어 주소 지정 방식 (addressing modes)

- 연산에 사용할 데이터가 저장된 위치를 찾는 방법
- 유효 주소를 찾는 방법
- 다양한 명령어 주소 지정 방식이 존재

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

- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태의 주소 지정 방식
- 연산에 사용할 데이터의 크기가 작아질 수 있지만 빠르다.

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

- 오퍼랜드 필드에 유효 주소 직접적으로 명시
- 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어든다.

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

- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 앞선 주소 지정 방식들에 비해 속도가 느리다.

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

- 위 방법들은 메모리에 주소 명시
- 연산에 사용할 데이터가 저장된 레지스터 명시
- 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름

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

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

'컴퓨터 구조' 카테고리의 다른 글

[컴퓨터구조] 빠른 CPU를 위한 설계  (0) 2024.03.15
[컴퓨터구조] CPU  (1) 2024.03.14
[컴퓨터구조] 컴퓨터가 0과 1로 숫자 및 문자를 표현하는 방법  (1) 2024.03.08
[컴퓨터구조] 컴퓨터의 핵심 부품 4가지  (0) 2024.03.06
[컴퓨터구조] 컴퓨터 구조를 배우는 이유  (0) 2024.03.06
'컴퓨터 구조' 카테고리의 다른 글
  • [컴퓨터구조] 빠른 CPU를 위한 설계
  • [컴퓨터구조] CPU
  • [컴퓨터구조] 컴퓨터가 0과 1로 숫자 및 문자를 표현하는 방법
  • [컴퓨터구조] 컴퓨터의 핵심 부품 4가지
Melon Man
Melon Man
Hello World
Melon Man
제발 CPU는 집에서 만들어 씁시다
Melon Man
전체
오늘
어제
  • 분류 전체보기 (644)
    • 직접 만들어 보기 (2)
    • 가내공업 (2)
    • HTML (0)
    • CSS (4)
    • JAVASCRIPT (51)
    • TYPESCRIPT (14)
    • NODE.JS (19)
    • REACT (7)
    • NEXT.JS (1)
    • REACT NATIVE (5)
    • REDUX (2)
    • PYTHON (17)
    • 자료구조 및 알고리즘 (35)
    • 컴퓨터 구조 (9)
    • 운영체제 (7)
    • NETWORK (3)
    • CodeUp 기본 100제 - Python (98)
    • 잡지식 (1)
    • 백준 (347)
    • SWEA (0)
    • GIT (4)
    • C (2)
    • C++ (11)
    • JAVA (2)
    • 객체지향프로그래밍 (0)
    • 정보처리기사 (1)
    • 프로그래머스_SQL (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • mdn
  • python
  • CodeUp
  • 표준내장객체
  • 코드업
  • 입문
  • input
  • 유니온 파인드
  • standard built-in object
  • C++
  • 자바스크립트
  • BFS
  • 운영체제
  • javascript
  • event
  • TypeScript
  • 자료구조
  • 백준
  • 다익스트라 알고리즘
  • node.js
  • 초보
  • 알고리즘
  • 기초
  • 입출력
  • 정렬
  • 위상정렬
  • 파이썬
  • Node
  • React
  • 함수

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
Melon Man
[컴퓨터구조] 소스 코드와 명령어
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.