컴퓨터/컴퓨터구조

[CA] Instructions: Language of Computer

xeskin 2020. 4. 18. 20:12
반응형

ISA vs Microarchitecture

- ISA: 하드웨어와 소프트웨어 사이의 인터페이스

- Microarchitecture

  1. ISA를 만족하는만큼 구현이 다양함

  2. 소프트웨어에 노출되지 않고 하드웨어에서 수행되는 모든 것

 

ISA: Language of Computer

- Instruction Set Architecture (or Instruction Set)

  1. 프로세서가 이해하는 기초적인 명령어 집합

- 다른 프로세서들 다른 명령어 집합을 갖고 있음

  1. 하지만 다른 프로세서간 명령어 집합은 비슷함. (비슷한 원리에 기반, 컴퓨터가 반드시 제공해야하는 기초적인 연산 때문에)

 

Arithmetic Instructions

- 덧셈과 뺄셈은 세개의 피연산자를 갖고 있는 연산

  1. 두개의 소스와 하나의 목적지를 갖고 있음

   add a, b, c  # the sum of b an c is placed in a

. 2. 모든 산술 명령어든 1번과 같은 형태

  3. Desgin Principle 1: Simplicity favors regularity

    a. 규칙성은 구현을 쉽게 만듬

    b. 단순함은 낮은 코스트로 높은 성능을 가져다 줄 수 있음

 

Register Operands

- 산술 연산에서 피연산자는 레지스터에서 가져옴

    1. 레지스터: 프로세서 안에 있는 저장 공간

- MIPS는 32x32-bit 레지스터 파일을 갖고 있음

    1. 레지스터의 사이즈: 32 bits (32비트 데이터는 'word'라고 부름)

- 레지스터를 표현하기 위한 MIPS notation

    1. $s0, $s1, ... C 프로그램의 variable에 대응되는 saved variables

    2. $t0, $t1, ... 프로그램을 컴파일할 때 필요한 temporary values

- Design Principle 2: Smaller is faster

    1. 레지스터 수와 성능 사이에는 트레이드 오프가 존재함

 

Register Operand Example

- C code: f = (g + h) - (i + j);

- f,g,h,i,j 는 각각 레지스터 $s0, $s1, ..., $s4를 할당받음

- Compiled MIPS code:

    add $t0, $s1, $s2

    add $t1, $s3, $s4

    sub $s0, $t0, $t1

 

Memory Operands

- 큰 데이터를 처리하는 명령어에 대해서, 레지스터와 메모리간의 데이터를 전송하는 것이 필요함

    1. MIPS에서 산술 명령어는 레지스터에서 연산을 수행해야함.

    2. 레지스터는 제한적이고, 데이터는 어레이와 같은 복잡한 데이터 구조를 가진 경우에 클 수 있음.

    3. 프로세서는 레지스터에 적은 양의 데이터를 갖고 있고, 메모리에는 많은 양의 데이터를 저장함.

    4. 그래서 우리는 'data transfer instruction'이 필요함.

      a. 메모리에서 레지스터로 데이터 복사: load (e.g. lw)

      b. 레지스터에서 메모리로 데이터 복사: store (e.g. sw)

- 메모리는 크고, 메모리 주소로 인덱싱된 single-dimensional array임.

- MIPS 메모리 피연산자에서, 주소는 base address와 offset의 합으로 표현함.

    lw &s1, 20(&s2). # s1 = memory[&s2+20]

.   lw: load word, 20 = offset. &s2 = base register: 시작 주소를 갖고 있음

- 메모리는 바이트 주소가 지정됨.

    1. 각각의 주소는 바이트로 식별할 수 있음

    2. 연속되는 word의 주소는 4만큼 차이가 남

- Alignment restriction (정렬 제약)

    1. word는 4의 배수인 주소부터 시작해야함.

- MIPS는 big-endian 방식을 채택함

    1. Big-endian: 데이터에서 가장 큰 바이트를 주소의 하단에 위치하도록 하는 것.

    2. Little-endian: 데이터에서 가장 작은 바이트를 주소의 하단에 위치하도록 하는 것.

 

Memory Operand Example 1, 2

- g = h + A[8]

  g와 h는 각각 $s1, $s2에 할당돼있음, A는 4바이트 어레이고 base address는 $s3

- Compiled MIPS code

  lw $t0, 32($s3)  # 일시적으로 A[8]의 값을 레지스터 $t0에 저장

  add $s1, $s2, $t0  # g = h + A[8]

 

- A[12] = h + A[8]

  h는 $s2에 할당돼있음, A는 4바이트 어레이고 base adress는 $s3

- Compiled MIPS code

  lw $t0, 32($s3).  # load word

  add $t0. $s2, $t0

  sw $t0, 48($s3) # store word

 

Register vs Memory

- 레지스터는 메모리보다 빠름.

- 레지스터에 접근하는 것은 메모리에 접근하는 것보다 에너지를 적게 소모함.

- 하지만, 레지스터의 수는 적음.

- 메모리에 있는 데이터들은 연산하려면 loads, stores 명령어가 필요함.

- 컴파일러는 가능한 많은 레지스터를 사용하도록 해야함.

 

Immediate Operands

- 명령어에서 지정된 상수 데이터임.

  addi $s3, $s3, 4  # addi: immeidate value와 덧셈을 해라. 4: immediate value

- 레지스터 $s3에 상수 4를 더하는 다른 방법

  lw $t0, AddConstant4($s1)

  add $s3, $s3, $t0

    추가적으로 load 명령어를 필요로 하기때문에 비효율적임

- immediate operand를 사용하는 명령어가 훨씬 빠르고 에너지를 적게 소모함.

 

Unsigned Binary Integers

- 숫자는 이진수로 표현됨

- n-bit 숫자가 주어졌을때, 십진수 값은 다음과 같이 계산할 수 있음.

- 표현 범위: 0에서부터 2^n - 1, 그런데 연산이 표현 범위보다 큰 값을 내놓으면 overflow가 발생함.

- LSB (least significant bit): 가장 오른쪽에 위치한 비트, 위에서는 X_0를 가리킴.

- MSB (most significant bit): 가장 왼쪽에 위치한 비트, 위에서는 X_(n-1)을 가리킴.

 

Signed Binary Numbers

- 숫자의 부호를 나타내고 싶음

- Naive solution: 양의 부호나 음의 부호를 가리키는 비트 하나를 정해줌.

  1. 어디에 지정해야하나?

  2. 산술 연산을 할 때, 적절한 부호가 무엇인지 미리 알 수 없기 때문에 부호를 설정하기 위한 추가 스텝이 필요함.

- 1's complement (1의 보수)

  음수: 양수 비트를 뒤집음 (0 -> 1, 1 -> 0)

- 2's complement (2의 보수)

  음수: 1's complement에 1을 더해줌

 

Signed Binary Numbers - 2's Complement

- 모든 음수는 MSB에 1을 갖고 있음. 부호를 판단할 때, MSB만 확인하면 됨.

- n-bit 숫자가 주어졌을 때, 십진수 값은 다음과 같이 계산할 수 있음.

- 표현 범위: -2^(n-1) 에서부터 2^(n-1) - 1

 

Sign extension

- n비트 이진수를 m비트 이진수로 바꾸고 싶음 (m>n)

- 왼쪽에 있는 sign bit를 복사해주면 됨

- 예. +2: 0000 0010 => 0000 0000 0000 0010

        -2: 1111 1110 => 1111 1111 1111 1110

- signed load는 정확한 값을 가져오기 위해서 sign extension을 사용함

  16bit 숫자를 32bit 레지스터에 넣는 경우, (lb, load byte)

 

Representing Instruction (Insruction format)

- 명령어는 이진수로 인코딩됨

- MIPS instructions

  1. 모든 MIPS 명령어는 32비트 길이를 갖고 있음 => 규칙성 (regularity)

  2. 명령어의 레이아웃, 배치는 instruction format이라고 불림.

 

MIPS R-format Instructions

- Instruction fields

  1. op: 명령어가 어떤 연산을 가리키는지 알려줌.

  2. rs: 첫번째 소스 레지스터 넘버

  3. rt: 두번째 소스 레지스터 넘버

  4. rd: 도착 레지스터 넘버

  5. shamt: 이동량

  6. funct: op field에서 연산의 특정한 변수를 뽑아내는 function code

 

MIPS I-format Instructions

- Instruction fileds

  1. op: 명령어가 어떤 연산을 가리키는지 알려줌.

  2. rs: 첫번째 소스 레지스터 넘버

  3. rt: 두번째 소스 레지스터 넘버

  4. constant: 상수값

- I-format이 필요한 이유

  1. R-type은 5bit보다 큰 주소를 표현할 수 없음.

  2. I-type은 16bit 주소까지 지원함.

반응형

'컴퓨터 > 컴퓨터구조' 카테고리의 다른 글

[CA] Processor (1)  (0) 2020.04.20
[CA] Arithmetic for Computer  (0) 2020.04.19
[CA] Computer Abstraction and Technology  (0) 2020.04.18