3. 명령어 - 명령어의 구조와 주소 지정 방식 #36
jcrescent61
started this conversation in
혼자 공부하는 컴퓨터 구조+운영체제
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
강의 링크 바로가기
명령어의 구조
앞에서 기계어와 어셈블리어의 형태로 명령어를 접해보았다. 기계어나 어셈블리어를 이루는 하나하나가 명령어라고 설명했었다. 이번에는 기계어나 어셈블리어를 이루는 각각의 명령어를 자세히 들여다보며 연산 코드, 오퍼랜드, 주소 지정 방식 이라는 개념에 대해서 학습해보자.
연산코드와 오퍼랜드
사람이 일반적으로 누군가에게 명령할 때 어떻게 말하는가? 아래 예시가 있다.
"학생들, 다음 주 까지 과제를 제출하세요."
"영수야, 방 좀 치워 줘!"
"멍멍아, 이거 물어와!"
위의 그림을 보면 알 수 있듯이, 컴퓨터 속 명령어도 마찬가지로 명령어는 '무엇을 대상으로, 무엇을 수행하라' 라는 구조로 되어있다.
색 배경 필드는 명령의 '작동', 즉 '연산'을 담고 있고 흰색 배경 필드는 '연산에 사용할 데이터' 또는 '연산에 사용할 데이터가 저장된 위치'를 담고있다.
명령어는 연산 코드와 오퍼랜드로 구성되어있다. 색 배경 필드 값, 즉 '명령어가 수행할 연산'을 연산 코드라 하고, 흰색 배경 필드 값 즉 '연산에 사용할 데이터' 또는 '연산에 사용할 데이터가 저장된 위치'를 오퍼랜드라고 한다. 연산 코드는 연산자, 오퍼랜드는 피연산자라고도 부른다. 이를 간단한 그림으로 표현하면 하나의 명령어는 위의 그림 처럼 색칠된 부분인 연산 코드가 담기는 영역을 연산 코드 필드라 부르고 색칠되지 않은 부분인 오퍼랜드가 담기는 영역을 오퍼랜드 필드라고 한다.
오퍼랜드
연산에 사용될 데이터 or 연산에 사용될 데이터가 저장된 위치를 의미한다. 하지만 이중에서 연산에 사용될 데이터가 저장된 위치가 훨씬 많에 담기게 된다. 이를 주소 필드라고 한다. 오퍼랜드는 명령어 안에 하나도 없을 수도 있고, 한 개만 있을 수도 있고, 두 개 또는 세 개 등 여러개가 있을 수도 있다.
오퍼랜드가 하나도 없는 명령어를 0-주소 명령어, 하나인 명령어를 1-주소 명령어, 두 개인 명령어는 2-주소 명령어, 세 개인 명령어를 3-주소 명령어라고 한다.
연산코드
연산 코드는 명령어가 수행할 연산을 의미한다. 연산 코드 종류는 매우 많지만, 가장 기본적인 연산 코드 유형은 크게 네 가지로 나눌 수 있다.
이 네 가지 유형 각각에 해당하는 대표적인 연산 코드를 알아보자. 명령어의 종류와 생김새는 CPU마다 다르기 때문에 연산 코드의 종류와 생김새 또한 CPU 마다 다르다. 지금부터 설명할 내용은 대부분의 CPU가 공통으로 이해하는 대표적인 연산 코드의 종류 정도로 이해하자.
데이터 전송
산술/논리 연산
제어 흐름 변경
입출력 제어
주소 지정 방식
앞서 '명령어의 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 경우가 많다, 그래서 오퍼랜드 필드를 주소 필드라고 부르기도 한다' 라고 언급했었다. 그렇다면 굳이 불편하게 주소를 담는 이뉴는 무엇일까? 애초에 데이터를 담아두면 되지 않는 것인가?
이유는 명령어 길이 때문이다. 하나의 명령어가 n비트로 구성되어 있고, 그중 연산 코드 필드가 m 비트라고 가정해보자. 이때 오퍼랜드 필드에 가장 많은 공간을 할당할 수 있는 1-주소 명령어라 할지라도 오퍼랜드 필드의 길이는 연산 코드만큼의 길이를 땐 n-m 비트가 된다. 2-주소 명령어, 3-주소 명령어라면 오퍼랜드 필드의 크기는 더욱 작아질것이다. 만약 명령어의 크기가 16비트, 연산 코드 필드가 4비트인 2-주소 명령어에서는 오퍼랜드 필드당 6비트 정도밖에 남지 않는다. 하나의 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수는 2의6승개 밖에 되지 않는다.(64)
명령어의 크기가 16비트, 연산 코드 필드가 4비트인 3-주소 명령어에서는 오퍼랜드 필드당 4비트 정도밖에 남지 않는다. 이 경우 하나의 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수는 2의4승개 밖에없을것이다.
하지만 만약 오퍼랜드 필드 안에 메모리 주소가 담긴다면 표현할 수 있는 데이터의 크기는 하나의 메모리 주소에 저장할 수 있는 공간만큼 커진다.
예를 들어 한 주소에 16비트를 저장할 수 있는 메모리가 있다고 가정해보자. 이 메모리 안에 데이터를 저장하고, 오퍼랜드 필드 안에 해당 메모리 주소를 명시한다면 표현할 수 있는 정보의 가짓수가 2의16승으로 대폭 증가할것이다.
이런식으로 표현할 수 있는 정보의 크기가 제한받지 않기 위해서 연산에 사용할 데이터의 위치를 명시하는 것이다.
오퍼랜드 필드에 메모리 주소가 아닌 레지스터 이름을 명시할 때도 마찬가지이다.
유효주소 (effective address)
연산 코드에 사용할 데이터가 저장된 위치, 연산의 대상이 되는 데이터가 저장된 위치를 유효 주소라고 한다. 첫 번째 그림의 경우 유효 주소는 10번지, 두 번째 그림의 경우 유효 주소는 레지스터 R1이 된다.
명령어 주소 지정 방식
즉시 주소 지정 방식 (immediate addressing mode)
직접 주소 지정 방식 (direct addressing mode)
간접 주소 지정 방식 (indirect addressing mode)
레지스터 주소 지정 방식 (register addressing mode)
레지스터 간접 주소 지정 방식 (register indirect addressing mode)
Beta Was this translation helpful? Give feedback.
All reactions