목차
- 소스 코드와 명령어
- 명령어의 구조
명령어
컴퓨터는 개발자가 작성한 소스 코드를 이해할 수 있을까요?
고급 언어와 저급 언어
- 고급 언어
- 개발자가 이해하기 쉽게 만든 언어
- 예) C언어, Java, Python
- 저급 언어
- 컴퓨터가 이해하고 실행하기 위한 언어
- 예) 기계어, 어셈블리어
저급 언어
기계어
- 이진수(0과1)로 표현된 기계어
어셈블리어
- 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어
고급 언어가 저급 언어로 변환되는 과정에는 크게 두가지 방식이 있다.
컴파일 방식
- 고급언어 => 컴파일 => 저급 언어
- 소스코드 => 컴파일러 => 목적 코드
- 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음(컴파일 에러)
정리
컴파일 언어로 작성된 소스 코드는 컴파일러에 의해
저급 언어로 변환되고(이 과정을 컴파일 이라고 함)
컴파일의 결과로 저급 언어인 목적 코드가 생성된다.
인터프리터 방식
- 인터프리터에 의해 한 줄씩 실행
- 소스 코드 전체가 저급 언어로 변환되기까지 기다릴 필요가 없음
- 소스 코드 인터프리트 중 오류가 발생하면 오류 발생 전까지의 코드는 실행(런타임 에러)
이 세상 모든 프로그래밍 언어가 전부 다 컴파일 언어, 인터프리트 언어로 구분되어 있는게 아니다!
컴파일 방식과 인터프리터 방식은 고급언어가 저급 언어로 변환되는 아주 대표적인 방식 중에 하나라고 생각하자!
명령어의 구조
무엇을 대상으로, 무엇을 실행하라
명령어의 구성 요소
연산 코드
수행할 연산
- 데이터 전송
- 산술/논리 연산
- 제어 흐름 변경
- 입출력 제어
오퍼랜드
연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치(주소 필드)
0개일 경우도 있고 하나 이상인 경우도 있다.
- 오퍼랜드가 없는 경우(0 - 주소 명령어)
- 오퍼랜드가 한 개인 경우(1 - 주소 명령어)
- 오퍼랜드가 두 개인 경우(2 - 주소 명령어)
- 오퍼랜드가 세 개인 경우(3 - 주소 명령어)
대표적인 연산 코드의 종류
데이터 전송
- 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: 입출력 장치의 상태를 확인하라
명령어 주소 지정 방식
- 유효 주소(effective address)
- 연산에 사용할 데이터가 저장된 위치
- 명령어 주소 지정 방식(addressing modes)
- 연산에 사용할 데이터가 저장된 위치를 찾는 방법
- 유효 주소를 찾는 방법
- 다양한 명령어 주소 지정 방식들
즉시 주소 지정 방식(immediate addressing mode)
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 가장 간단한 형태의 주소 지정 방식
- 연산에 사용할 데이터의 크기가 작아질 수 있지만, 빠름
- 뒤적거리는 과정이 없기 때문에!!
직접 주소 지정 방식(direct addressing mode)
- 오퍼랜드 필드에 유효 주소 직접적으로 명시
- 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듬
간접 주소 지정 방식(indirect addressing mode)
- 오퍼랜드 필드에 유효 주소의 주소를 명시
- 앞선 주소 지정 방식들에 비해 속도가 느림
- CPU는 메모리를 뒤적뒤적 거리는 속도는 느리다!
레지스터 주소 지정 방식(register addressing mode)
- 연산에 사용할 데이터가 저장된 레지스터 명시
- 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠름
- CPU 안에 있기 때문에!!!
레지스터 간접 주소 지정 방식(register indirect addressing mode)
- 연산에 사용할 데이터를 메모리에 저장
- 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
'CS' 카테고리의 다른 글
[CS] 메모리, 캐시 메모리 (0) | 2024.05.23 |
---|---|
[CS] CPU의 성능 향상 기법 (0) | 2024.05.22 |
[CS] CPU의 작동 원리 (0) | 2024.05.22 |
[CS] 정보 단위, 인코딩 (1) | 2024.05.22 |
[CS] 컴퓨터 구조 (0) | 2024.05.21 |