CS notes/CA
[CA] 명령어
느낌있는 곳
2024. 4. 10. 11:56
고급언어 & 저급언어
- 고급언어
- 사람을 위한 언어
- 대부분의 프로그래밍 언어 - 저급언어
- 컴퓨터가 직접 이해하고 실행할 수 있는 언어
- 고급언어 ➜ 저급언어 변환이 되어야 실행될 수 있음
- 기계어 (0과 1의 명령어 비트로 이루어진 언어)
- 어셈블리어 (기계어를 읽기 편한 형태로 번역한 언어) - 어떤 개발자가 되고 싶은지에 따라 중요성이 달라짐
- 임베디드, 게임, 정보 보안 관련 개발자는 어셈블리어를 배울 필요가 있음
컴파일 언어
- 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급언어
- 컴파일 - 저급 언어로 변환하는 과정
- 컴파일러 - 컴파일을 수행하는 도구
- 목적 코드 - 컴파일러를 통해 저급 언어로 변환된 코드
- 처음부터 끝까지 오류가 하나라도 있다면 컴파일에 실패하게됨
- 대표적으로 C언어가 있음
인터프리터 언어
- 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급언어
- 인터프리터 - 코드를 한 줄씩 저급언어로 변환하여 실행해주는 도구
- N번째 줄에 문법오류가 있더라도 N-1번째 줄까지는 올바르게 수행된다
- 대표적으로 Python이 있음
목적 파일 & 실행 파일
- 목적 파일
- 목적 코드로 이루어진 파일 - 실행 파일
- 실행 코드로 이루어진 파일
- .exe파일이 대표적인 실행파일 - 링킹
- 목적 코드 ➜ 실행 파일이 되기 위해 거치는 작업
- 외부 기능을 연결지어 완전한 실행파일을 만드는 것
명령어의 구조
연산 코드 (연산자)
- 명령어가 수행할 연산을 의미
- 데이터 전송
MOVE, STORE, LOAD, PUSH, POP - 산술/논리 연산
ADD, SUBTRACT, MULTIFLY, DIVIDE, INCREMENT, DECREMENT, AND, OR, COMPARE - 제어 흐름 변경
JUMP, HALT, CALL, RETURN - 입출력 제어
READ, WRITE, START IO, TEST IO
오퍼랜드 (피연산자)
- 연산에 사용할 데이터 or 데이터 저장 위치
- 주소 필드 = 메모리 주소 or 레지스터 이름이 담긴다
- 오퍼랜드의 개수 ➜ 0-주소 명령어 ~ 3-주소 명령어
주소 지정 방식
- 즉시 주소 지정 방식
- 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
- 다른 주소 지정 방식에 비해서 빠름 - 직접 주소 지정 방식
- 오퍼랜드 필드에 유효 주소를 직접적으로 명시
- 표현할 수 있는 오퍼랜드의 길이가 연산 코드의 길이만큼 짦아짐
- 표현할 수 있는 유효 주소에 제한이 생길 수 있음 - 간접 주소 지정 방식
- 직접 방식에 비해 표현 가능한 유효 주소의 범위가 더 넓어짐
- 2번의 메모리 접근이 필요하여 속도가 느린편 - 레지스터 주소 지정 방식
- 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
- 표현할 수 있는 레지스터 크기에 제한이 생길 수 있음 - 레지스터 간접 주소 지정 방식
- 연산에 사용할 데이터를 메모리에 저장하고, 그 유효 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
- 간접과 유사한 방식이지만 접근하는 횟수가 1번임