ETC/CS

[컴퓨터구조] ch.2-2 산술 동작

지과쌤 2020. 10. 24.
반응형

간단한 산술동작

add a, b, c     # a = b + c

sub a, b, c     # a = b - c

 

간단한 산술동작으로부터 규칙성을 가지도록 하면, 구현함에 있어 굉장히 간단해진다.

 

조금 복잡한 산술동작

f = (g+h) - (i+j);

 

각각의 부분 결과를 저장할 수 있어야한다. 즉

 

add t0, g, h     # temp t0 = g + h

add t1, i, j        # temp t1 = i + j

sub f, t0, t1     # f = t0 - t1

 

t0 와 t1은 각각의 계산을 잠깐 저장할 임시저장소이다.

 

 

즉. 임시 결과를 저장하는 요소가 필요한데, 그것을 레지스터(register) 라고 한다.

그리고 컴파일러가 각각의 값들을 여러 레지스터 중 어디로 매핑할것인지 작업하게된다.


연산에 필요한 값을 메모리로부터 가져오는 경우

g = h + A[8]     // Assume g in $s1, h in $s2     

                        // Base address of A in $s3     

 

h : 임의의 레지스터에 들어있다.

A[8] : 메모리에 들어있는 배열의 한 요소

 

Compiled MIPS (Index 8 requires offset of 32)

lw $t0, 32($s3)     #32 is offset, $s3 base register

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

 

32($s3) 은 메모리 내의 위치 주소값를 나타낸다. 

lw $t0, 32($s3) 는 32($s3) 에서 값을 가져와 임시 저장소인 $t0에 저장하는것이다. - 메모리로부터 값을 가져오는 load


MIPS Operands

MIPS는 load-store register architecture 라고 부른다

[컴퓨터구조] ch.2-2 산술 동작 - MIPS Operands

  • 32개의 레지스터, 각각은 32-bit (4 bytes) 의 길이를 갖고있다.
  • 메모리 주소는 32-bit의 길이를 갖고있다. 
  • 각각의 word는 32-bits (4bytes)
    • 프로세서와 메모리 사이의 공통 전송 단위
    • 일반적으로 레지스터 크기, 정수 크기 및 명령 크기와 일치한다.

Memory Content : Big Endian vs. Little Endian

[컴퓨터구조] ch.2-2 산술 동작 - Memory Content : Big Endian vs. Little Endian

  word가 byte0 ~ byte3 또는 byte1 ~ byte4 ..... 이런식으로 저장이 되어있다.

이때 byte0 ~ byte3에 저장이 되어있다고 할때, word를 대표하는 주소는 byte0일까 byte3일까?

 

[컴퓨터구조] ch.2-2 산술 동작 - Memory Content : Big Endian vs. Little Endian

하나의 word 주소를 대표하는 byte를 0로 할것인지 3으로 할것인지 문제가 발생한다.

 

  • Big Endian :  word 주소를 표현할 때 제일 왼쪽의 byte를 기준으로 표현
    • 제일 왼쪽의 byte가 이 word를 나타내는 주소가 된다.
  • Little Endian : 제일 오른쪽의 byte를 기준으로 표현
    • 제일 오른쪽의 byte가 word 주소가 된다.

왜 문제가 될까?

 

서로 다른 방식을 따르는 두 컴퓨터 사이에 데이터를 주고받는다면, 주소는 같지만 그 위치에 있는 내용은 다르게 되는 현상이 발생할 수 있다.

따라서 그 값을 일치시켜주는 작업 (swap) 을 해야한다.


즉각적인 산술동작

예를 들어 명령어 내에 상수 데이터가 표현이 되어야 할 때.

 

a = b + 5

 

addi $s3, $s4, 5

 

자주 발생하는 케이스에 대해서 빠르게 처리하기 위한 방법으로써 Immediate Operands 는 이렇게 표현하게 된다.

실질적으로 load를 덜 하게되면 성능면에서 이득이니깐.

 

Constant Zero

실제로 MIPS 에서는 register 0 을 상수 0 으로 활용하고있다.

 

주소는 $zero

 

레지스터값을 복사한다던가 할때 굉장히 유용하게 사용할 수 있다.

 

add $t2, $s1, $zero    ->  $s1 레지스터에 있던 값이 $t2로 복사됨!

 


[컴퓨터구조] ch.2-2 산술 동작 - 즉각적인 산술동작 - undefined - Constant Zero

  1. 메모리에 있는 값을 물리적인 구성인 버스를 통해 읽어온다. (load)
  2. 읽어온 값을 컴파일러가 매핑한 임의의 레지스터에 저장한다.
  3. 저장한 값을 가져다 ALU 중 가산기에서 더하기를 한다.
  4. 더한 결과를 일시적으로 임의의 레지스터에 저장한다.
  5. 레지스터의 내용을 메모리로 다시 보낸다 (store)

MIPS operands (참고)

[컴퓨터구조] ch.2-2 산술 동작 - 즉각적인 산술동작 - undefined - MIPS operands (참고)

 


Signed and Unsigned Numbers (Ch 2.4)

[컴퓨터구조] ch.2-2 산술 동작 - Signed and Unsigned Numbers (Ch 2.4)
msb vs lsb

 

Signed binary number 를 표기하는 세가지 방법

  1. 제일 앞자리를 부호로 생각한다. 0이면 +, 1이면 -1
  2. 1의 보수
  3. 2의 보수

참고) N의 (r-1)의 보수는 $(r-1)^n$-N이 된다.

 

 

binary 1010 에 대한 3가지 방법 각각 구해보기.

  1.  -2
  2. 1의 보수 : 0101
  3. 2의 보수 : 0110

 

 

 

 

반응형

댓글