컴퓨터아키텍처
Computer Architecture
2016-03-16
Instruction (2장)
지난 영상 강의 개념설명 보충 및 MIPS 어셈블리
과제 제출 안내
- Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
-
[새로 만들기] 버튼을 눌러
CA16<이름><학번> 폴더를 만들고 (예: CA16김연아123456)
만들어진 폴더를 우클릭하여 나오는 드롭메뉴에서
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한) - Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
- Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유
MIPS 어셈블리 실습
- SPIM 시뮬레이터 사용
- 홈페이지에서 다운로드
http://spimsimulator.sourceforge.net/
- 홈페이지에서 다운로드
- 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,359