📱명령어의 구조📱
우리가 작성한 소스코드는 컴퓨터 내부에서 저급언어로 변환돼서 실행된다.
저급 언어는 크게 기계어, 어셈블리어로 나뉘고!
이런 저급 언어는 결국 명령어이다.
명령어들은 어떻게 생겼고 어떻게 동작할까?
우리가 강아지에게 명령을 하면 솔아 공 물어와! 라고 할 수 있을 것이다.
컴퓨터에서도 마찬가지로, '무엇에 대해 무엇을 수행하라' 라고 명령을 한다.
명령어의 구조는 간단하게 아래와 같다.
수행할 연산 + 연산에 사용되는 데이터 or 연산에 사용되는 데이터가 저장된 위치.
ex. 더해라 + 10과, 20을
ex. 나눠라 + 100을, 메모리 20번지의 값으로
ex. 저장해라 + 10을, 메모리 128번지에
연산코드 + 오퍼렌드(데이터/데이터 위치)
오퍼랜드
오퍼랜드에는 연산에 필요한 데이터가 있거나, 해당 데이터의 위치가 저장되어 있는데
오퍼랜드에는 실제 데이터보다는 연산에 필요한 데이터 위치(주소)가 저장되는 경우가 훨씬 많기 때문에,
주소 필드로 부르기도 함.
오퍼랜드가 0개인 경우는 0- 주소 명령어
오퍼랜드가 3개인 경우는 3- 주소 명령어로 부르기도 함.
(명령어 내에서 데이터 크기의 제한이 있기 때문에 데이터는 오퍼랜드 필드에 직접 저장하기 보다는
메모리/레지스터에 저장하고, 그 위치 데이터만 저장하는 것이 용이)
*유효 주소 (effective address) - 연산에 사용할 데이터가 저장된 위치
* 명령어 주소 지정 방식(addressing modes)
연산에 필요한 데이터가 저장된 위치를 찾는 방법. (유효 주소 찾는 방법)
데이터 어디 저장 돼 있는데??
<메모리 지정 방식>
1. 즉시 주소 지정 방식 (immediate addressing mode)
연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식
가장 간단한 형태, 연산에 사용할 데이터의 크기에 제한이 있지만 속도가 빠름.
2. 직접 주소 지정 방식 (direct addressing mode)
오퍼랜드 필드에 유효 주소를 직접 명시 (ex. 메모리 몇 번지..)
but 유효 주소를 표시할 수 있는 크기에 제한이 있음.
3. 간접 주소 지정 방식 (indirect addressing mode)
(유효 주소 표시의 공간을 확보하기 위해)
오퍼랜드 필드에 '유효 주소의 주소'를 명시 (타고 타고 찾아감)
타고 타니까 느림.
<레지스터 지정 방식>
1. 레지스터 주소 지정 방식 (register addressing mode)
연산에 사용할 데이터가 저장된 레지스터 명시. (레지스터의 유효 주소)
CPU가 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 훨씬 빠름.(당연히 레지스터는 CPU 안에 있으니)
2. 레지스터 간접 주소 지정 방식(register indirect addressing mode)
연산에 사용할 데이터를 메모리에 저장.
해당 메모리의 주소를 레지스터에 저장
오퍼랜드 필드에서는 레지스터의 주소를 저장.
연산 코드
연산 코드의 종류나 형태는 CPU에 따라 상이하다. 그래서 아래 명령어의 형태보다는 종류에 대해 집중하는 것이 좋음.
기본적으로는 크게 아래 네 가지 종류가 있다.
1. 데이터 전송
MOVE(데이터 이동), STORE(데이터 저장), LOAD(FETCH)(메모리에서 CPU로 데이터 로드)
PUSH(스택에 데이터 저장), POP(스택 최상단 데이터 가져오기)
2. 산술/논리 연산
덧셈, 뺄셈, 곱셉, 나눗셈 (사칙 연산)
INCREMENT/DECREMENT (오퍼랜드에 더하기, 빼기)
AND/OR/NOT: AND/OR/NOT (논리 연산)
COMPARE (비교 연산)
3. 제어 흐름 변경
JUMP(특정 주소로 실행 순서 옮김)
HALT(프로그램 실행 멈춤)
CALL(되돌아올 주소 저장, 특정 주소로 실행 순서 옮김)
- 함수를 호출하면 함수가 저장되어 있는 메모리 주소 공간의 명령어들을 실행하고,
실행을 완료하면 함수를 호출했던 메모리 주소로 되돌아감
RETURN(CALL을 호출할 때 저장했던 주소로 돌아감)
4. 입출력 제어
입출력 장치로부터 데이터 읽기(input)
입출력 장치로 데이터 쓰기 (output)
입출력 장치 시작, 테스트 등
학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
6. 레지스터 (0) | 2023.08.13 |
---|---|
5. ALU와 제어장치 (0) | 2023.08.10 |
3. 소스코드/명령어 (0) | 2023.07.11 |
2. 0과 1로 문자 표현 (0) | 2023.07.06 |
1. 0과 1로 숫자 표현 (0) | 2023.07.05 |