본문 바로가기

컴퓨터 구조론( MIPS )

명령어 : 컴퓨터 언어 2

728x90
반응형

 

반응형

안녕하세요. WH 입니다.

지난 글에 이어서 다시 정리해보도록 할게요

지난 글 내용이 기억나지 않으신다면, 아래 내용을 참조해주세요

2022.02.07 - [컴퓨터 구조론( MIPS )] - 명령어 : 컴퓨터 언어 1

 

명령어 : 컴퓨터 언어 1

안녕하세요. WH입니다. 적은 분들이지만, 제 글을 읽어주시는 분들이 생겨났네요. 정기적으로 찾아오시는 분들은 아니지만, 그 적은 분들을 위해서라도 열심히 꾸준히 써보겠습니다. 오늘은 명

developer-wh.tistory.com

 

상수 또는 수치 피연산자

상수를 생각하는 경우는 생각보다 많은데요, 대체로 메모리의 다음 원소를 가리키는 것이 대표적 예라 할 수 있습니다. 적재 명령을 활용해서 상수가 저장되 있는 메모리에서 상수를 읽어 오는 방법이 있고, immediate 피연산자를 활용하는 방법이 있습니다. immediate 피연산자를 사용하는 연산자는 addi 입니다.

 

예시 )

addi $s3, $s3, 4

 

이런식으로 활용하게 되죠. 의미는 만약 메모리 주소를 가지고 있는 저장소가 $s3 라면 위의 명령은 $s3의 + 4를 한 즉 다음 배열의 주소를 가리키게 되겠죠. 이 방법은 메모리에서 매번 상수를 가져오는 것보다 연산 속도에서 우위를 가집니다. 또한 상수 0은 복사(move) 연산을 가능하게 합니다.

 

명령어의 컴퓨터 내부 표현

레지스터가 명령어에서 참조가 되기 떄문에 레지스터 이름을 숫자로 매핑하는 규칙이 있어야 합니다. MIPS 에서는 $s0 -$s7 까지는 레지스터 16-23 번까지, $t0-$t7은 8-15번에 매핑합니다. 전에 했던 예제를 가지고 매핑되는 방식을 보겠습니다.

 

add $t0, $s1, $s2

를 매핑하고 십진수로 표현해보면

 

|     0     |     17     |      18      |     8      |     0     |      32   

    6bits        5bit         5bits        5bits       5bits         6bits

000000      10001       10010      01000     00000      100000 ( 기계어 )

-> 이런 명령어들의 시퀀스를 machine code 라 합니다

 

 

위와 같이 표현 됩니다. |          | 를 필드( field )라고 합니다. 조금 설명하자면, 첫 번째 필드와 마지막 필드 ( 0, 32 ) 부분은 덧셈을 지시하는 부분이고 17 -> $s1, 18 -> $s2, 8 -> $t0 를 의미하며 shift는 없음을 의미합니다. shift관련 해서는 조금 나중에 다루도록 할게요. 총 32 bit를 표현한다고 했죠? 6 5 5 5 5 6 비트가 각각 할당 됩니다.

 

MIPS의 명령어 필드

 

R타입 ( Register )

|     op     |     rs     |      rt      |     rd      |     shamt     |      funct    |

 

각 필드마다 이름이 있습니다.

 

op : 명령어가 실행할 연산의 종류 ( 연산자 )

rs : 첫 번재 source 피연산자 레지스터

rt : 두 번째 source 피연산자 레지스터

rd : destination 레지스터

shamt : 자리 이동량 ( shift 랑 )

fuct : fuction( 기능 ) op필드에서 연산 종류 표시후 fuct 필드에서 연산을 구체적으로 지정

 

I타입 ( immediate )

 

|     op     |     rs     |      rt      |     constant or address    |

|     6bits   |    5bits  |    5bits    |           16bits                |

 

i 타입이 생겨난 이유는 5bits에는 32보다 작은 값만을 사용할 수 있기 때문에, 총 길이는 맞추되 많은 값을 표현하기 위해 생겨났습니다. 주소 표현에 사용되니까 해당 명령어로는 lw와 sw가 있겠죠?? 당연히 명령어 필드에서는 32 개 보다 많은 레지스터를 사용할 수 없겠죠. 왜냐? 최대 표현이 0-31 가지이기 때문입니다. 참고로 lw 는 op 필드 35, sw는 op 필드 43로 구별된답니다. 

 

예시> $t1 에 배열 A의 시작 주소가 있고 $s1가 변수 a 에 대응될 때,

A[ 100 ] = a + A[ 100 ] 

를 컴파일하면?

 

lw $t0, 400($t1)

add $t0, $s2, $t0

sw $t0, 400($st1)

 

십진수 표현 기계어

35      9       8            400

0       18      8      8      0      32

43      9       8            400

이렇게 된답니다. 여기까지가 산술연산 명령어 관련 기본 내용이었는데요, 다음으로는 논리 연산 명령어에 대해 알아보겠습니다. 오늘도 읽어주셔서 감사합니다. 이상 WH 였습니다.

 

 

728x90
반응형