컴퓨터 구조 | 명령어, 컴퓨터 언어

서론

컴퓨터 하드웨어에게 일을 시키려면 하드웨어가 알아들을 수 있는 언어로 말을 해야하며, 컴퓨터 언어에서의 단어를 명령어 라고 하며 그 집합을 명령어 집합 이라고 한다. 본 강의에서는 명령어 집합의 하드웨어 표현방식 및 상위 수준 언어와의 관계를 보이며, 이를 통해 내장 프로그램의 개념을 이해한다.

하드웨어 연산

기본적으로 컴퓨터는 산술연산을 할 수 있으며 다음과 같은 명령어를 사용한다.

add a, b, c

위의 명령어는 b+c를 한 결과값을 a에 담는 식이다.

3. 피연산자

레지스터 라고 하는 하드웨어로 직접 구현된 특수 위치 몇 곳에 있는 것만 사용할 수 있다. MIPS 구조에서 이러한 레지스터의 크기는 32비트(4 byte) 이며 총 32개로 레지스터의 갯수가 제한 되어 있으며 본 강의에서는 각 레지스터 마다의 성질을 보여주기 위해 $뒤의 숫자 가령 $t0와 같은 방식으로 레지스터를 표기한다. 레지스터의 수가 제한된 이유는 레지스터가 아주 많아지면 전기 신호가 더 멀리까지 전달되어야 하므로 클럭 사이클이 길어지기 때문이다.

레지스터 안에는 변수, 명령어 등이 저장될 수 있는데,프로그래밍 언어에는 단순한 변수 이외에도 레지스터 개수보다 훨씬 많은 데이터 원소수가 있을 수 있다. 산술연산은 레지스터에 의해서만 실행되므로 메모리의 값을 레지스터에 옮겨오기 위해서는 이들 사이에 데이터를 주고받기 위한 명령어가 필요한데, 이를 데이터 전송 명령어 라고 한다. 메모리에서 레지스터로 데이터를 옮기는 실제 명령어는 다음과 같다.

lw t0, 8($s3)

한 주소블록은 32비트(즉, 4byte)를 기준으로 하기 때문에 위 명령은 t0에 $s3에서부터 8번째 데이터를 담는 것이다. 즉 실제 주소는: $s3 + 8*4byte에 위치한다.

레지스터 연산을 할때 상수를 더하는 경우가 있는데, 이 경우에는 상수만을 위한 명령어 addi 등을 사용한다. 이 경우 상수값을 메모리에서 가져오는 것이 아니라 프로세서 내에서 바로 더해 줌으로써 훨씬 빠르게 처리를 할 수 있다.

상수 덧셈의 예

addi $s3, $s3, 4

어셈블리어의 기계어 표현

레즈스터 내의 기계어 명령어 필드

R타입

oprsrtrdshamtfunct
연산자피연산자피연산자2목적지자리이동 양기능
6bit5bit5bit5bit5bit6bit

I 타입

oprsrtconstant+address
6bit5bit5bit21bit

하드웨어의 프로시저 지원

프로시저는 일종의 함수 역할을 하는 것으로 전달인수 레지스터4개와 반환 레지스터 2개, 복귀주소 1개로 이루어져 있다.