프로그래밍 언어로 만든 소스코드 -(변환)> 명령어
C, C++, JAVA, Python 등 컴퓨터는 프로그래밍 언어를 이해하지 못함
고급 언어, 저급 언어
고급언어 -(변환)> 저급언어
컴퓨터가 이해할 수 있도록 저급언어로 변환해주어야 함
-사람을 위한 언어
-컴파일 언어
-인터프리터 언어
-컴파일러에 의해 소스 코드 전체가 저급언어로 변환
-목적 코드 : 컴파일러를 통해 저급 언어로 변환된 코드
-종류 : C언어
-인터프리터에 의해 소스 코드가 한줄씩 실행
-종류 : Python
-compile 언어가 더 빠름
-종류 : JAVA
-컴퓨터가 직접 이해하고 실행할 수 있는 언어
-기계어
-어셈블리어
-기계어를 사람의 언어로 번역
-0,1 bit로 이루어진 언어
목적파일 : 목적코드로 이루어진 파일
-컴파일러가 소스파일을 번역해서 만들어짐
실행 파일 : 실행코드로 이루어진 파일 , ex) .exe
-바로 컴퓨터에서 실행 가능
목적코드가 실행파일이 되기 위해서는 링킹(linking, 연결작업)을 거쳐야 함
-연산코드 + 오퍼랜드
-연산코드(operation code) : 연산
-오퍼랜드(operand) : 연산에 사용할 데이터 혹은 데이터가 저장된 위치
-오퍼랜드가 담기는 영역 = 오퍼랜드 영역 = 주소 필드
-오퍼랜드 갯수에 따라 아래와 같이 정리함
(1) 데이터 전송
(2) 산술/논리 연산
(3) 제어 흐름 변경
(4) 입출력 제어
-CPU가 명령어를 실행할 때 오퍼랜드(피연산자)의 주소 결정하는 방법
즉, 어떤 방식으로 메모리 주소를 계산하고 접근할지를 정의
-명령어 길이 때문에 오퍼랜드에 데이터를 넣음
c.f. 명령어의 크기가 16비트, 연산 코드 필드가 4비트인 2-주소 명령어에서 오퍼랜드 필드는?
(16-4)/2=6
따라서 오퍼랜드 필드는 2^6=64(bit)
오퍼랜드 필드 안에 메모리 주소가 담긴다면, 표현할 수 있는 데이터의 크기는
하나의 메모리 주소에 저장할 수 있는 공간만큼 커짐
= 오퍼랜드가 가리키는 데이터의 크기가 커지면, 연산의 결과나 처리할 수 있는 데이터의 양 증가
-특정 명령어 실행 시 실제로 접근할 메모리 위치를 나타내는 주소
-CPU가 명령어를 해석할 때 주소 지정 방식을 사용하여 계산된 주소
Stack(스택)
-한쪽 끝이 막혀 있는 저장 공간
-LIFO(Last In First Out)
Queue(큐)
-양쪽이 뚫려있는 저장 공간
-FIFO(First In First Out)