컴퓨터아키텍처
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코드를 어셈블리나 기계어로 번역
- Interpreter (통역기) - 언어를 읽어들여 바로 실행
- Assembler 어셈블러
- 어셈블리 코드를 기계어 바이너리(이진코드)로 번역
(어셈블러도 일종의 아주 간단한 컴파일러로 볼 수 있다)
- 어셈블리 코드를 기계어 바이너리(이진코드)로 번역
- 교과서 15p 그림 참조
기계어
- 컴퓨터의 CPU는 바이너리(이진수)로 된 기계어 실행
- CPU를 포함한 컴퓨터를 하드웨어로 구현한
기계어 인터프리터라고 이해할 수도 있다
- CPU를 포함한 컴퓨터를 하드웨어로 구현한
- Instruction(명령) - 기계어를 이루는 단위
기계어 코드는 여러 개의 명령을 한줄로 나열한 것
machine language = seqence of instructions - 특정 CPU 아키텍처가 지원하는 (즉 컴퓨터가 이해하는) instruction의 집합을 instruction set이라고 한다
- MIPS, ARM, x86, SPARC, 등등 여러 아키텍처가 있음
어셈블리 언어
- 0과1로만 구성된 기계어는 사람이 읽기 너무 어렵다
- Assembly Language 어셈블리 언어
- 기계어로 번역하기 쉽도록 설계
(기계어의 구조를 거의 그대로 반영) - 하지만 사람이 읽기 편한 텍스트 형태
- 기계어로 번역하기 쉽도록 설계
- Assembler(어셈블러)
어셈블리 언어를 기계어로 번역해주는 프로그램
MIPS 어셈블리 실습
- SPIM 시뮬레이터 사용
- 홈페이지에서 다운로드
http://spimsimulator.sourceforge.net/
- 홈페이지에서 다운로드
- 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,173