Last update: @1/7/2023
명령어
•
프로그래밍 언어(소스 코드)는 해석되어 명령어로 번역됨
•
종류
◦
고급 언어(high-level programming language)
: 사람을 위한 언어
▪
종류
•
컴파일 언어(ex> C)
: 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어
- 실행 전부터 오류 검출 가능(컴파일 언어)
•
인터프리터 언어(ex> Python)
: 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어
- 오류 지점 전까지는 정상 실행됨
▪
대부분의 언어는 컴파일 방식과 인터프리터 방식 둘 다 가능함
◦
저급 언어(low-level programming language)
: 컴퓨터가 직접 이해하고 실행할 수 있는 언어
▪
종류
•
어셈블리어
•
기계어
▪
목적 파일과 실행파일
•
목적 파일
: 컴파일러를 통해 저급 언어로 변환된 코드인 목적 코드로 이루어진 파일
•
실행 파일
: 실행코드로 이루어진 파일. 목적 파일들이 링킹 작업을 통해 연결되어 실행가능해진 코드
•
명령어의 구조
: 명령어는 연산코드 + 오퍼랜드로 구성됨
◦
연산 코드(operation code = operator = 연산자)
연산 코드 필드: 연산 코드가 담기는 영역
▪
기본적인 유형
•
데이터 전송
◦
MOVE
: 데이터를 옮겨라
◦
STORE
: 메모리에 저장하라
◦
LOAD(FETCH)
: 메모리에서 CPU로 데이터를 가져와라
◦
PUSH
: 스택에 데이터를 저장하라
◦
POP
: 스택의 최상단 데이터를 가져와라
•
산술/논리 연산
◦
ADD / SUBTRACT / MULTIPLY / DIVIDE
: 덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행하라
◦
INCREMENT / DECREMENT
: 오퍼랜드에 1을 더하라 / 빼라
◦
AND / OR / NOT
: AND / OR / NOT 연산을 수행하라
◦
COMPARE
: 두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
•
제어 흐름 변경
◦
JUMP
: 특정 주소로 실행 순서를 옮겨라
◦
CONDITIONAL JUMP
: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
◦
HALT
: 프로그램의 실행을 멈춰라
•
입출력 제어
◦
READ(INPUT)
: 특정 입출력 장치로부터 데이터를 읽어라
◦
WRITE(OUTPUT)
: 특정 입출력 장치로 데이터를 써라
◦
START IO
: 입출력 장치를 시작하라
◦
TEST IO
: 입출력 장치의 상태를 확인하라
◦
오퍼랜드(operand = 피연산자)
▪
오퍼랜드 필드: 오퍼랜드가 담기는 영역 = 주소 필드
▪
오퍼랜드 개수에 따른 명령어 종류
•
0-주소 명령어
: 오퍼랜드가 하나도 없는 명령어
•
1-주소 명령어
: 오퍼랜드가 하나인 명령어
•
2-주소 명령어
: 오퍼랜드가 두개인 명령어
•
3-주소 명령어
: 오퍼랜드가 세개인 명령어
▪
주소 지정 방식
: 오퍼랜드 필드에 데이터가 저장된 위치(유효주소)를 명시할 때 연산에 사용할 데이터 위치를 찾는 방식
•
즉시 주소 지정 방식(immediate addressing mode)
: 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
•
직접 주소 지정 방식(direct addressing mode)
: 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
•
간접 주소 지정 방식(indirect addressing mode)
: 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식
•
레지스터 주소 지정 방식(register addressing mode)
: 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방식
•
레지스터 간접 주소 지정 방식(register indirect addressing mode)
: 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방식
•
스택 주소 지정 방식(stack addresing mode)
: 스택 포인터라는 레지스터를 이용한 주소 지정 방식
•
변위 주소 지정 방식(displacement addressing mode)
: 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식. 이 방식을 사용하는 명령어는 연산 코드 필드, 레지스터 필드, 오퍼랜드 필드가 있음
◦
상대 주소 지정 방식(relative addressing mode)
: 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식. 즉 프로그램 카운터의 주소를 기준으로 오퍼랜드를 offset으로 하여 주소를 얻음
◦
베이스 레지스터 주소 지정 방식(base-register addresing mode)
: 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식. 즉 베이스 레지스터의 주소를 기준으로 오퍼랜드를 offset으로 하여 주소를 얻음