[컴퓨터 구조] LEGv8의 ISA 명령어 종류와 특징 (2)

업데이트:




지난 포스팅에 이어 Instruction Set에 대해 작성해보겠다. 해당 포스팅은 가천대학교 소프트웨어학과 정용주 교수님의 강의를 기반으로 필요한 정보를 더 추가해 제작했음을 알립니다.







Instruction Format ( 명령어 구조 )


Instruction은 일정한 구조를 띈 채로 저장되는데 그 구조는 그림과 같다.

▪ LEGv8에서 Instruction (명령어)는 정확히 32비트의 크기를 가진다. ▪ 각각의 segment는 “field”라고 부른다


명령어 구조는 우리가 보기 편하게 나타낸 것이고 실제로 컴퓨터가 받아드리는 것은 binary number로 인식한다.

위와같이 numeric 하게 표현된 명령어를 Machine Language (기계어)라고 부른다.







Types of Instructions


명령어에는 일반적으로 3가지 종류가 있다.

지금부터 각 명령어의 구조에 대해서 살펴보자.







R-Format Instructions

두개의 operand를 가지는 레지스터 2개와 연산 결과를 저장하는 레지스터 1개를 가리키는 명령어 구조이며, 일반적으로 Arithmetic Operation이나 Logic Operation에 사용된다. ( add, sub, mul, div, and, or 등 )

Opcode : 명령어의 종류를 나타낸다. ( Operation Code )

Rm : 두번째 오퍼랜드가 들어가는 레지스터의 주소를 담고있다. ( Source register )

shamt : 얼마나 쉬프트를 할지에 대한 정보를 담고있다. ( Shift amount )

Rn : 첫번째 오퍼랜드가 들어가는 레지스터의 주소를 담고있다. ( Target register )

Rd : 결과값이 담길 레지스터의 주소를 담고 있다. ( Destination register )




R-Format Example

▪ ADD X9, X20, X21 이라는 명령어가 주어졌을 때의 명령어 집합이다.

▪ X9 = X20 + X21을 의미한다.

▪ LEGv8에서 ADD의 opcode는 1112로 지정되어있다.

▪ Rm에는 두번째 오퍼랜드인 X21의 레지스터 주소인 101012(=21)을 담고있다.

▪ shamt에는 따로 쉬프트 연산이 존재하지 않으므로 0000002을 담고있다.

▪ Rn에는 첫번째 오퍼랜드인 X20의 레지스터 주소인 101002(=20)을 담고있다.

▪ Rd에는 결과값인 X9의 레지스터 주소인 010012(=9)을 담고있다.

이때 Rm, Rn, Rd는 5bit만 담을 수 있는데 그 이유는 LEGv8이 32개의 레지스터를 가지기 때문이다.







D-Format Instruction

Data Transfer를 하는 명령어 구조이다. 데이터를 가져오는 LDUR데이터를 저장하는 STUR 명령어가 대표적이다.

Opcode : 명령어의 종류를 나타낸다. ( Operation Code )

Address : 저장될 데이터 Base register의 Offset ( 상대주소 ) 이 저장된다

Rn : Base register의 주소를 담고있다.

Rt : Destination(Load) 또는 Source(Store)의 레지스터 주소를 담고있다.




D-Format Example

▪ LDUR : 어떤 데이터를 저장하겠다는 명령어이다.

▪ X9가 Rt, 즉 결과값이 저장될 Destination이다.

▪ [ X10 , #240 ] : X10 레지스터에 저장된 Base register의 240bit (= 30바이트) 짜리 크기가 240bit( = 30byte )인 데이터를 의미한다.







I - Format Instruction

Immediate Operation, Transfer(lw/sw 등), Branch 등을 위해 사용되는 Instruction Format이다. I-Foramt이 쓰이는 가장 중요한 이유는 레지스터가 아닌 메모리에 접근해서 무언가를 가져오거나, 상수를 반드시 써야할 때 사용된다. (레지스터가 아닌 오퍼랜드를 쓸때 I Format을 유용하게 사용한다)

▪ 다른 format과 거의 비슷한 구조이므로 나머지는 생략하겠다.

immediate : 나타내고 싶은 상수의 값은 byte offset으로 표현한다.

댓글남기기