컴퓨터아키텍처

Computer Architecture

2016-03-10


Instruction (2장)

과제 제출 안내

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

Instruction에 대해 다루기 전에

  • 컴파일러와 어셈블러
  • 기계어
  • 어셈블리 언어

1장 보충 - 컴파일러, 어셈블러

  • 프로그래밍 언어를 구현할 때 크게 두 가지 방법
    • Interpreter (통역기) - 언어를 읽어들여 바로 실행
      • 예: 계산기 프로그램 1+3 입력하면 바로 4계산
    • Compiler (번역기) - 고급언어를 저급언어로 번역
      • 예: C컴파일러가 C코드를 어셈블리나 기계어로 번역
  • Assembler 어셈블러
    • 어셈블리 코드를 기계어 바이너리(이진코드)로 번역
      (어셈블러도 일종의 아주 간단한 컴파일러로 볼 수 있다)
  • 교과서 15p 그림 참조

기계어

  • 컴퓨터의 CPU는 바이너리(이진수)로 된 기계어 실행
    • CPU를 포함한 컴퓨터를 하드웨어로 구현한
      기계어 인터프리터라고 이해할 수도 있다
  • Instruction(명령) - 기계어를 이루는 단위
    기계어 코드는 여러 개의 명령을 한줄로 나열한 것
    machine language = seqence of instructions
  • 특정 CPU 아키텍처가 지원하는 (즉 컴퓨터가 이해하는) instruction의 집합을 instruction set이라고 한다
    • MIPS, ARM, x86, SPARC, 등등 여러 아키텍처가 있음

어셈블리 언어

  • 0과1로만 구성된 기계어는 사람이 읽기 너무 어렵다
  • Assembly Language 어셈블리 언어
    • 기계어로 번역하기 쉽도록 설계
      (기계어의 구조를 거의 그대로 반영)
    • 하지만 사람이 읽기 편한 텍스트 형태
  • Assembler(어셈블러)
    어셈블리 언어를 기계어로 번역해주는 프로그램

MIPS 어셈블리 실습

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

Instruction(명령)

  • 스택 머신과 레지스터 머신 비교
  • Instruction의 구성
  • Instruction Set의 구성
  • MIPS 어셈블리 - 실습과 병행하며 익힌다

Stack Machine

 

load 1

load 2

add

load 4

load 5

add

add

Register Machine

[r0:_, r1:_, r2:_, r3:_, ...]

[r0:1, r1:_, r2:_, r3:_, ...]

[r0:1, r1:2, r2:_, r3:_, ...]

[r0:3, r1:2, r2:_, r3:_, ...]

[r0:3, r1:2, r2:4, r3:_, ...]

[r0:3, r1:2, r2:4, r3:5, ...]

[r0:3, r1:2, r2:9, r3:5, ...]

[r0:12,r1:2, r2:9, r3:5, ...]

(1 + 2) + (4 + 5)

[]

[1]

[2,1]

[3]

[4,3]

[5,4,3]

[9,3]

[12]

 

load r0 1

load r1 2

add r0 r0 r1

load r2 4

load r3 5

add r2 r2 r3

add r0 r0 r2

Instruction의 구성

  • Instruction의 길이는 (대부분) 일정
  • 일반적으로
    register 크기 = word = instruction의 길이
    • 32bit 컴퓨터의 1 word = 32 bit = 4 byte
    • 64bit 컴퓨터의 1 word = 64 bit = 8 byte
  • 대부분의 instruction은 1 word
  • 간혹 2 word이상의 multiple-word instruction
  • instruction = opcode + operand(s

Instruction = opcode + operand(s)

  • opcode - 무슨 종류의 연산인지 나타내는 부분
  • operand - 연산에 필요한 인자
  • 1 word 안에 opcode와 operand들을 넣어야 함
    • 예를 들어 32bit 머신에서 opcode에 1 byte 즉 8 bit를 쓰기로 했다면 oprand들은 나머지 24 bit에 담아야
    • 참고상식: JVM등 소프트웨어로 만들어진 가상머신의 instruction을 보통 bytecode라 부르는 경우가 많은데 이는 opcode에 1 byte를 쓰기 때문
    • 교과서에서 주로 다루는 MIPS는 opcode에 6 bit를 씀

Instruction Set의 구성

  • 기능별 분류
    • Arithmetic (산술)
    • Data transfer (데이타 전송 - 메모리 관련)
    • Logial (논리)
    • Control (흐름)
      • Conditional branch (C 조건문, 반복문 등에 해당)
      • Unconditional jump (C의 goto에 해당)
  • 교과서 p. 64 참고할 것

(instruction의 종류 분류)

Instruction Set의 구성

  • 같은 연산을 하는 instruction이라도 operand에 따라
    • R-타입 (예: add) - operand들이 모두 레지스터
    • I-타입 (예: addi) - operand 중에 상수값 있음
  • 교과서 pp. 82-83 참고할 것

(instruction의 종류 분류)

컴퓨터아키텍처

By 안기영 (Ahn, Ki Yung)

컴퓨터아키텍처

2016-03-10

  • 2,099