[CS] Lecture4

Minsol·2024년 10월 14일
0

🖥️CS

목록 보기
3/12

Chapter2: Instructions: Language of the Computer (컴퓨터의 명령어)

Instruction Set(명령어 집합)

  • 컴퓨터의 명령어 목록
  • 서로 다른 컴퓨터들은 각각 다른 명령어 집합을 가짐
    -> 여러 공통점들이 있음!
  • 초기의 컴퓨터: 매우 단순한 명령어 집합 가짐(구현의 단순화)
  • 현대의 컴퓨터: 여전히 단순한 명령어 집합 가지고 있음

컴퓨터 기본 구성 요소

  • 구성요소
    - device: 네트워크, 입력장치, 출력장치
    - memory
    - processor: 제어장치(control), 데이터경로(datapath)

    1. 입력 장치가 Object code를 입력함
    1. Object code가 메모리에 저장됨
    1. 프로세서가 메모리에서 명령어를 가져옴 (fetch) -> 필요한 영역만 잘라서 가져오는 것
    1. 제어장치(Control)는 명령어를 해독하여 무엇을 실행할지 결정함 -> 나머지 정보 자르고 명령(ex.AND)만 남김
    1. 데이터경로(datapath)가 control에 의해 지시된 대로 명령어 실행함
    1. 출력 데이터를 메모리에 저장함 (원래의 정보는 삭제하고 실행시킨 내용을 저장하는 것)
    1. 출력 장치는 데이터를 출력함

Operands of the Computer Hardware (컴퓨터 하드웨어의 피연산자)

Register Operands(레지스터 피연산자)

  • 산술 명령어는 레지스터 피연산자를 사용
  • RISC-V는 32 × 64-bit 레지스터 파일을 가짐
    • 자주 접근하는 데이터를 저장하는 데 사용
    • 64-bit 데이터 = "doubleword"라고 불림
      • 32개의 64비트 범용 레지스터(x0~x31)
    • 32-bit 데이터 = "word"라고 불림

Memory Operands(메모리 피연산자)

  • Main memory(주기억장치): 복합 데이터에 사용됨
    • 배열, 구조체, 동적 데이터
  • 산술 연산을 적용하려면?
      1. 메모리에서 값을 레지스터로 load
      1. 레지스터에서 메모리로 결과 store
  • 메모리는 byte 단위로 주소가 지정됨
    • 각 주소는 8-bit byte를 식별함
  • RISC-V는 Little Endian 방식!
    • word의 가장 낮은 주소에 가장 낮은 byte가 저장됨
    • cf. Big Endian은 반대 => 가장 높은 byte가 가장 낮은 주소에 저장됨
  • RISC-V는 메모리에서 word의 정렬을 요구하지 않음

레지스터 vs 메모리

  • 접근속도: 레지스터가 더 fast
  • 메모리 데이터를 다루려면 load, store 필요함
    • 더 많은 명령어가 실행되어야함
  • 컴파일러는 가능한 한 많이 변수들을 레지스터에 저장해야함
    - 자주 사용되지 x는 변수만 메모리로 저장
    • 레지스터 최적화 매우 중요!!

Signed and Unsigned Numbers

이진수 -> 십진수 변환


RISC-V R-format Instructions


32비트 명령어로 인코딩됨

  • <명령어 필드>
    • opcode: operation code(연산코드)
    • rd: 목적 레지스터 번호
    • funct3: 추가 연산 코드로, 3비트 함수 코드
    • rs1: 첫 번째 소스 레지스터 번호
    • rs2: 두 번째 소스 레지스터 번호
    • funct7: 추가 연산 코드로, 8비트 함수 코드

RISC-V Instruction encoding

Hexadecimal(16진수)

  • bit 문자열을 압축해서 표현
  • 16진수 한자리당 4bit

R-format Example


Memory Layout(메모리 공간을 어떻게 나누어 사용하는지)

  • Text: 프로그램 코드
  • 정적 data: 전역 변수
    • ex. C언어의 정적 변수, 상수 배열과 문자열
    • x3(전역 포인터)는 이 세그먼트에 ±오프셋이 가능한 주소로 초기화됨
  • 동적 data: heap
    • ex. C의 malloc, Java의 new
  • Stack: 자동 저장소
profile
👀

0개의 댓글