프로그래밍[Univ]/아키텍처

[Architecture] ISA (Instruction set architecture)

Cloud Travel 2013. 4. 23. 21:25

* Design Principle

 - smaller is faster : 작은 것일 수록 빠르다

 - regularity :  단순한 일을 반복 실행

 - Good common part : 항상 수행되는 일에 걸리는 시간ㅇ르 단축

 - Good design demands compromise(타협)


* Controller 결함

 - CPU결함. 따라서, Controller는 잘 만들어야 한다.

 - 이는 ISA와 밀접한 연관 관계를 같는다.

  > 컴퓨터에서 어떤 명령이 수행될 수 있는 가를 알려준다.

  > 컴퓨터를 구현하기 위해서 어떤 하드웨어 기능이 필요한가를 알려준다.


* 명령 표현 형식

 - 각각의 명령을 이진수로 어떻게 표현되는가를 규정하는 방법

 - 하나의 명령 = "연산조작(operation)" + "연산의 대상(operand)" = "instruction word"

 - "즉치" : 상수를 대상으로 연산을 수행할 수 있게 하는 오퍼렌드의 한 종류

 - Field : 하나의 명령을 표현하기 위한 영역 / Field를 어떻게 나누는 가를 명령표현 방식이라고 한다.

  ※ 앞으로의 설명은 명령의 길이가 고정된 "고정장"에서의 명령형식에 대해 설명

   > 명령어를 Fetch하기 위해 Memory에 가는 횟수를 동일하게 맞춘다.

   1) R형 : register를 이용하여 명령을 수행 / [op][rs][rt][rd][ aux ] // aux : 부수 정보

   2) I형 : 즉치 값 또는 dpl을 사용하여 명령을 즉시 수행 / [op][rs][rt][ imm / dpl ]

   3) A형 : 메모리를 이용하여 명령 수행 / [op][      addr      ]

 - Field의 분배

  1) op : log2[명령 집합의 크기]

  2) register(rs,rt,rd) : log2[레지스터의 개수]

  3) aux, imm/dpl, addr : (명령어 길이) - (다른 필드의 전체 비트 수)

  ex)

R형     [op(6)][rs(5)][rt(5)][rd(5)][  aux(11)   ]

I형      [op(6)][rs(5)][rt(5)][ imm/dpl(16)        ]

A형     [op(6)][        addr(26)                        ]

> operation set의 크기 : 2^6 = 64개

> 총 명령어의 개수 = 오퍼레이션의 종류 * 가능한 오퍼랜드의 개수

> register의 개수 : 2^5 = 32개

> 찾아 갈 수 있는 Memory register 개수 : 2^26 = 64M(bytes)

> 고정장 길이 = 4bytes

 ※ 어셈블리어 : 기계어 프로그램을 표현하는 방법

  eg) addr r1, r2, r3 // r1 = r2 + r3   [add][r2][r3][r1][0000000]


* 명령집합

 - 산술 및 논리 연산 명령, 데이터 이동 명령, 분기 명령으로 구분

 1) 산술 및 논리연산 명령 ( R형, I형 )

   - 명령어 표를 보고 여러 사실을 유추 가능해야 한다.

   

   ※ shift 명령

    - sla, sll > 왼쪽으로 imm값 만큼 이동 후 빈 공간을 0 으로 채운다

    - sra      > 오른쪽으로 imm값 만큼 이동 후 가장 왼쪽의 bit을 확장한다.

    - sla      > 왼쪽으로 imm값 만큼 이동 후 빈 공간을 0으로 채운다.

 2) 데이터 이동명령

  - 레지스터간의 이동, "메모리에서 레지스터간"의 이동, 메모리와 입출력 기기간의 이동으로 나뉜다.

  - memory > register  : load instruction

  - register > memory  : store instruction

  - 전형적인 데이터 이동 명령

  

  - I 형의 이동 명령의 경우 [op][rs][rt][ dpl ] 

   > rs + dpl = 메모리 주소

   > rt = 데이터 저장, 출력 레지스터의 위치

 3) 분기명령

  - PC의 값을 변경한다.

  


* 주소 지정 방식

 - 데이터나 명령이 저장되어 있는 장소를 지정하는 것

 - Compiler 입장에서는 다양한게 좋지만, CPU입장에서는 cycle time이 증가하게 된다.

 - 주소 지정 방식을 단순화시켜 사이클 타임을 단순화시키는 방향으로 발전

 - 종류

  1) 즉치 주소 지정 방식 : imm

  2) 베이스 상대 주소 지정 방식 : reg + dpl

  3) 레지스터 주소 지정 방식 : reg

  4) PC 상대 주소 지정 방식 : PC + 4 + dpl // PC + 4

  


* Zero register

 - 항상 0을 유지하는 register (r0)

 - 메모리에 가지 않아도 데이터를 저장

  ex) addi r1, r0, 28 ; // r1에 28을 저장

       eq r1, r0, r1;  // r1 xor r0 값을 r1에 저장(보수)