서론
컴퓨터 하드웨어에게 일을 시키려면 하드웨어가 알아들을 수 있는 언어로 말을 해야하며, 컴퓨터 언어에서의 단어를 명령어 라고 하며 그 집합을 명령어 집합 이라고 한다.
본 강의에서는 명령어 집합의 하드웨어 표현방식 및 상위 수준 언어와의 관계를 보이며, 이를 통해 내장 프로그램의 개념을 이해한다.
하드웨어 연산
기본적으로 컴퓨터는 산술연산을 할 수 있으며 다음과 같은 명령어를 사용한다.
1 | add a, b, c |
위의 명령어는 b+c를 한 결과값을 a에 담는 식이다.
3. 피연산자
레지스터 라고 하는 하드웨어로 직접 구현된 특수 위치 몇 곳에 있는 것만 사용할 수 있다.
MIPS 구조에서 이러한 레지스터의 크기는 32비트(4 byte) 이며 총 32개로 레지스터의 갯수가 제한 되어 있으며 본 강의에서는 각 레지스터 마다의 성질을 보여주기 위해 $뒤의 숫자 가령 $t0와 같은 방식으로 레지스터를 표기한다.
레지스터의 수가 제한된 이유는 레지스터가 아주 많아지면 전기 신호가 더 멀리까지 전달되어야 하므로 클럭 사이클이 길어지기 때문이다.
레지스터 안에는 변수, 명령어 등이 저장될 수 있는데,프로그래밍 언어에는 단순한 변수 이외에도 레지스터 개수보다 훨씬 많은 데이터 원소수가 있을 수 있다.
산술연산은 레지스터에 의해서만 실행되므로 메모리의 값을 레지스터에 옮겨오기 위해서는 이들 사이에 데이터를 주고받기 위한 명령어가 필요한데, 이를 데이터 전송 명령어 라고 한다. 메모리에서 레지스터로 데이터를 옮기는 실제 명령어는 다음과 같다.
1 | lw t0, 8($s3) |
한 주소블록은 32비트(즉, 4byte)를 기준으로 하기 때문에
위 명령은 t0에 $s3에서부터 8번째 데이터를 담는 것이다.
즉 실제 주소는: $s3 + 8*4byte에 위치한다.
레지스터 연산을 할때 상수를 더하는 경우가 있는데, 이 경우에는 상수만을 위한 명령어 addi 등을 사용한다.
이 경우 상수값을 메모리에서 가져오는 것이 아니라 프로세서 내에서 바로 더해 줌으로써 훨씬 빠르게 처리를 할 수 있다.
상수 덧셈의 예1
addi $s3, $s3, 4
어셈블리어의 기계어 표현
레즈스터 내의 기계어 명령어 필드
R타입
op | rs | rt | rd | shamt | funct |
---|---|---|---|---|---|
연산자 | 피연산자 | 피연산자2 | 목적지 | 자리이동 양 | 기능 |
6bit | 5bit | 5bit | 5bit | 5bit | 6bit |
I 타입
| op | rs | rt | constant+address |
|:—- |:—- | —- | —————- |
| 6bit | 5bit | 5bit |21bit|
하드웨어의 프로시저 지원
프로시저는 일종의 함수 역할을 하는 것으로 전달인수 레지스터4개와 반환 레지스터 2개, 복귀주소 1개로 이루어져 있다.
Comments