학습동아리 2차시

정민경·2022년 10월 30일
0

2022_학습동아리

목록 보기
2/12
post-thumbnail

- 활동일시

  • 일시 : 2022.10.12(수) 19:00 ~ 21:00 (2시간)

- 오늘의 계획

  • 컴퓨터구조 문제 풀이
    - 피연산자
    - Byte Ordering(바이트 저장 순서)
    - RISC-V instruction sequence로 표현

- 오늘의 활동

1) 피연산자에 대한 문제 풀이

(a) 레지스터 피연산자에 대한 메모리 피연산자의 장점

  • 소량의 데이터만을 저장할 수 있는 레지스터에 비해 메모리는 수십억 개의 데이터 저장이 가능하다.

(b) 메모리 피연산자에 대한 레지스터 피연산자의 장점

  • 레지스터는 CPU 바로 옆에 위치해 있어 접근속도가 굉장이 빠름.
  • 32bit의 경우 레지스터가 메모리보다 약 200배 빠르고, 에너지 효율도 10,000배 정도 높다.

(c) immediate 피연산자가 필요한 이유

  • 상수연산은 자주 사용되는데 매번 메모리에서 상수를 가져와야하고, 수행되는 instruction 개수도 많다.
  • 자주 사용되는 상수연산을 더 빠르고, 에너지를 적게 사용하기 위해 사용한다.

2) Byte Ordering에 대한 문제 풀이

- endian

메모리가 있을 때, 어떤 순서로 메모리에 저장시킬 것인가.

  • Big-endian
  • Little-endian

(a) Big-endian

큰 단위의 수(MSB)가 메모리의 최소주소에 저장된다.
ex) 0x123456

(b) Little-endian

작은 단위의 수(LSB)가 메모리의 최소주소에 저장된다.
ex) 0x123456


3) RISC-V instruction sequence로 표현하는 문제 풀이

(a) 다음 C문장을 RISC-V instruction sequence로 바꾸어 표현하시오.

1) a = b - 1;
2) a = b + 1024;
3) a = b + 4096;                         (x22 : a, x23 : b 할당되어있음.)

위의 C코드는 상수와 변수의 덧셈연산이므로 addi 연산을 사용하면 된다.

addi reg1, reg2, immediate   # reg1 = reg2 + immediate

1) a = b + 1;

addi x22, x23, -1

2) a = b + 1024;

addi x22, x23, 1024;

3) a = b + 4096;

addi x22, x23, 4096 (X)

위와같이 하게되면 제대로 실행이 되지 않는다.
그 이유는 addi 명령어는 -2048 ~ 2047 사이의 상수값만 연산이 가능하기 때문이다. 그렇기 때문에 이 문제는 다른 방법으로 연산을 수행해야 한다.

addi x22, x0, 1            # a = 1;
slli x22, x22, 12		   # a = a * 12; (4096 == 2*12)
addi x22, x23, x22		   # a = b + 4096;

이 외에도 lui 연산을 사용해도 해결 가능하다.


- 활동 소감

아직은 코드를 짜면서 보이지 않았던 메모리를 공부하고 있다 보니 이해가 잘 되지 않고 많이 어려운 느낌이다. 이번 컴퓨터구조 과제를 해결할 때도 힘들었고, 구글링의 도움을 많이 받았다. 그래도 메모리가 어떻게 할당되는지, 연산들은 어떻게 이루어지는지 이해할때쯤 되면 컴퓨터에 대해 조금이라도 이해가 될 수 있을 것 같다.

0개의 댓글