컴퓨터아키텍처

Computer Architecture

2016-03-16


Instruction (2장)
지난 영상 강의 개념설명 보충 및 MIPS 어셈블리
 

과제 제출 안내

  • Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
  • [새로 만들기] 버튼을 눌러
    CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
    만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
    폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한)
  • Google 메일 계정만 있으면 Google Drive 서비스 이용 가능 
  • Google 메일 계정은 무료로 만들 수 있으며
    참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유

MIPS 어셈블리 실습

  • SPIM 시뮬레이터 사용
  • MIPS 어셈블리 syntax coloring 지원하는텍스트 에디터
    • Sublime Text
    • Notepad++
    • Vim
    • Emacs

RISC vs CISC

  • Reduced Instruction Set Computer (RISC)
    • 간단한 Instruction Set - 모든(대부분) 명령이 1-cycle
    • MIPS, ARM, PowerPC, SPARC 등
  • Complex Instruction Set Computer (CISC)
    • multiple-cycle이 필요한 복잡한 고수준 명령도 지원
    • 대표적으로 인텔의 x86
  • 현대의 CISC 아키텍처에서는 multiple-cycle instruction을 microinstruction이라는 single-cycle 명령으로 쪼개서 실행
    • CISC의 내부 구현을 RISC로 하고 있는 셈
    • 이렇게 된 이유 중 하나는 파이프라인 기능 지원 때문

Stored-Program concept

프로그램 실행에 필요한
인스트럭션과 데이타를
같은 메모리에 올려놓고
사용하는 컴퓨터 구조

MIPS

  • 레지스터 크기 32bit (4byte) = 1 word = instruction 길이
  • s0 = s1 + s2; // C 언어
    add $s0, $s1, $s2 // MIPS 어셈블리
  • s0 = s1 + 7; // C 언어
    addi $s0, $s1, 7 // MIPS 어셈블리
  • 이런 식으로 컴파일러가 고급 언어의 변수들을 레지스터에 대응시키는 것을 Register Allocation(레지스터 할당)
  • 그런데 레지스터 개수가 제한되어 있다. 그래서 레지스터에 할당되지 못한 변수는 메모리에 저장해야 하는데 이를 register spilling (다 못담고 넘쳐서 흘렸다는 의미에서 spill)

MIPS 레지스터 이름에 따른 구분

  • 책 표지를 넘기면 나오는 초록색 깨알같은 표 및 p. 105 참조
  • $zero 그냥 항상 0값이 들어있다 (이건 쓰기 불가)
  • $at 어셈블러 임시변수
  • $v0 ~ $v1 함수 결과값 저장 또는 수식 계산 용도
  • $a0 ~ $a3 함수 인자
  • $t0 ~ $t9 임시 레지스터
  • $s0 ~ $s7 임시 레지스터인데 함수 호출 후 값을 유지할 용도
  • $k0 ~ $k1 운영체제 커널이 특별한 용도로 사용
  • $gp 글로벌 포인터
  • $sp 스택 포인터
  • $fp 프레임 포인터
  • $ra 리턴 주소 (함수 호출을 끝내고 돌아갈 주소)

MIPS

  • 레지스터 크기 32bit (4byte) = 1 word = instruction 길이
  • s0 = s1 + s2; // C 언어
    add $s0, $s1, $s2 // MIPS 어셈블리
  • s0 = s1 + 7; // C 언어
    addi $s0, $s1, 7 // MIPS 어셈블리
  • addi 명령의 세번째 상수 인자는 크기가 16bit로 제한된다
    즉 -2^15 ~ 2^15-1 범위의 수만 가능
    왜냐하면 1 word를 잘라서 쓰고 있기 때문
  • MIPS에서 1 word인 32bit로 표현할 수 있는 singed int 정수값 범위는 -2^31 ~ 2^31-1

이진수 unsinged & singed integer

  • unsigned integer는 음수가 없고 0이상만 다루므로
    그냥 상식적인 수준에서 이진수 변환
    unsigned integer 범위는 0 ~ 2^32-1
  • MIPS 포함 현존하는 거의 모든 컴퓨터는 signed integer를
    이진수 표현으로 2의 보수(two's complement)​
    • 맨 앞에 한 비트를 sign bit로 사용 (1이면 음수)
    • sign bit가 0일 때는 unsigned int 와 같다
    • n과 n의 비트를 뒤집어(bitwise complement) 표현된 수
      이 둘을 더하면 -1
    • 0000 0000 0000 0000 0000 0000 0000 0000  ##  0
    • 1111 1111 1111 1111 1111 1111 1111 1111  ## -1
    • 32bit signed int 범위는 -2^31 ~ 2^31-1

컴퓨터아키텍처

By 안기영 (Ahn, Ki Yung)

컴퓨터아키텍처

2016-03-16

  • 2,278