SlideShare a Scribd company logo
1 of 27
Download to read offline
The Hardware/Software Interface
MIPS CPU의 이해 (입문)
Instruction & Overview
JEONG JIN WOOK
2015. 10. 22
Index
n MIPS 명령어
n beq, bne
n 순환문
n 대소비교..
n MIPS 관련용어
n Register, ALU
n Word, ALU
n Control Unit, Register Set
n PC, Mux ..
n MIPS 개괄적 이해
n 핵심명령어
n CPU Overview, 피연산자, 레지스터 사용관례
n MIPS 구현, R형식, I형식
n MIPS의 데이터패스 예
MIPS 명령어 – beq, bne
n Conditional Branch
n beq register, register2, L1
n register, register2가 같으면 L1로 이동
n beq = branch if equal
n bne register, register2, L1
n register, register2가 다르면 L1로 이동
n bne = branch not equal
MIPS 명령어 - 순환문
n while(save[i]==k) i+=1;의 MIPS 어셈블리 코드 작성
n 주소계산후, 임시 레지스터에 t1의 값을 넣은후, 조건검사후, != 으면 1을 더한후,
처음으로 다시 돌아간다.
Loop : sll $t1, $t3, 2
# sll은 shift left logical의 약자로, 왼쪽자리이동을 말함
# $t3를 좌측으로 2비트 이동하면 4를 곱한것과 같음 이를 직관적으로
표현하면, $t1 = i * 4 와 같음
add $t1, $t1, $s6
# $s6의 베이스 주소값을 더함.
lw $t0, 0($t1)
# 임시 레지스터에 저장
bne $t0, $s5, Exit
# save[i]!=k이면 순환문을 빠져 나감
ADDI $S3, 3, 1
# I에 1을 더함 I=I+1
J Loop
Exit:
# 순환문의 끝에서 맨 앞의 Loop로 되돌아감.
MIPS 명령어 – 두 변수간 대소비교
n slt (set on less than)
n slt $t0, $s3, $s4
n $t0=1 if $s3 < $s4
MIPS 명령어 – 프로시저 지원
n 프로시저
n procedure에 제공되는 인수에 따라 특정 작업을 수행하는
서브루틴
n jar (jump and link instruction)
n jal ProcerdureAddress
n 지정된 주소로 점프후 다음 명렁어의 주소를 ra register에
저장
n jr (jump register)
n jr $ra
n 저장된 주소로 무조건 점프
n $a0-$a3 인수레지스터에 전달할 인수값을 저장후, jal X
명령어를 이용해, 프로시저 X로 점프후, 계산결과를 $V0-
$V1(반환되는 값을 가지는 레지스터2개)에 저장후 jr
$ra(호출한곳의 복귀주소)명령으로 복귀
MIPS 명령어 - 산술명령어
n MIPS의 산술명령어는 add 연산을 말하며 다음 형식을 가짐
n add a, b, c #주석
n b + c를 a에 저장하는 명령어
n 피연산자를 3개로 제안함으로서 간단한 설계를 유지함
n 여기서, instruction(연산자)는 add이며, operand(피연산자)는 a,b,c를 말함
MIPS 관련용어
n 레지스터
n 레지스터는 순차회로이다. CPU 명령어는 레지스터 기반으로 동작.
n 32Bit로 이루어짐
n $0, $1 .. $31 으로 이름지어 있음
n 순차회로는, 플립플롭이라는 메모리 소자가 있으며, 클럭 펄스가
들어오기 전에는 출력단에 변화가 없다. (이런 이유로, 메모리소자라함)
n 레지스터(클럭필요)는 입력값 3이 바뀌더라도, 출력값 1이 변하지 않음
MIPS 관련용어
n Word
n 각 기억 장소에 저장되는 데이터 단위로서, CPU에 의해 한 번에
처리될 수 있는 비트들의 그룹
n ALU
n 조합회로이다. 클럭이 필요없으며, 입력값이 바뀌면, 그 값이 바로
반영됨. 다음 클럭이 인가되어야만, 1의 값이 변하게됨.
n 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진
하드웨어 모듈로, 산술연산(+, -, ×, ÷)과 논리연산(AND, OR,
NOT, XOR 등) 수행
n Control Unit
n ALU에서 수행할 동작지시
n 레지스터간의 데이터 전송 감시
n 명령어를 해석하고 실행하기 위한 제어 신호들(control
signals)를 순차적으로 발생하는 H/W 모듈
MIPS 관련용어
n Register Set
n 명령어 수행 동안 발생하는 임시 데이터 저장
n PC (Program Counter)
n 현재 명령어의 주소나 다음에 인출할 명령어를 가짐
n 명령어를 저장하고 주소가 주어지면 해당 명령어를 목적지 주소로 갱신
n PC를 다음 명령어 주소로 증가
n ALU를 통해 다음 명령어 주소로 증가하는 덧셈기 구현가능
MIPS 관련용어
n MUX
n 레지스터 선택 및 선택된 레지스터 정보를 ALU로 출력하는 선택
논리회로
MIPS 관련용어
n 인스트럭션
n CPU가 해야할 작업을 지시하는 정형화된 언어
n C프로그램은 컴파일을 거쳐 Intruction 형태로 바뀜
n CPU는 일련의 매커니즘에 의해 메모리에서 순서대로 Instruction을
읽어오며, 이 과정을 Instruction Patch라고 함
n Instruction은 연산종류를 의미하는 Operation 입력값과 대상이 되는
값인 Operand를 지정하며, Operation 입력은 Operation Code (OP
Code, 연산자)라고 부름
n I-타입 Instruction
n 연산결과가 레지스터에 저장되며, 연산의 입력값인 두 Operand는
Instruction에 직접 상수형태로 기록될 수 있다.
n R-타입 Instruction
n Operand값이 임의의 레지스터에 저장되고 Instruction에는 이
Register를 지정하는 값이 들어갈 수 있다.
MIPS - 개요
n MIPS
n Microprocessor without Interlocked Pipeline Stages
n 밉스 테크놀로지에서 개발한 RISC ISA
n RISC : Reduced Instruction Set Computer
n RISC는 CPU 명령어수를 줄여 H/W구조를 간단히 만드는 방식이다.
n ISA : Instruction Set Architecture)
n 컴퓨터 프로그램과 H/W간 인터페이스에 대한 완전한 명세
도시바에서 생산한
MIPS R4400 프로세서.
n 여러 기능 유닛과 그들 사이의 연결에 초점
n multiplexor 추가 필요 (근원지중 하나를 선택하여 목적지로 보내는
구성요소)
MIPS - CPU Overview
MIPS - 핵심 명령어
n Memory reference: lw, sw
n Arithmetic/logical: add, sub, and, or, slt
n Control transfer: beq, j
MIPS - 피연산자
n MIPS에서 Register
n 32 bit를 word단위로 처리
n 산술명령어는 32bit register중 하나여야함
n 레지스터 개수는 32개로 제한함으로서,전 전기 신호 거리를 짧게
함으로서, 클럭 사이클 시간을 단축시키기 위함
n 레지스터 사용예
n C 코드로, f = (g + h) - (i + j); 을 하는 프로그램이 있을때,
n f,g,h,i,j가 레지스터 $s0, $s1, $s2, $s3, $s4 에 할당되었다는 전제하에
MIPS code로 다음과 같이 나타낼 수 있음
n add $t0, $s1, $s2 #g + h을 t0에 저장
add $t1, $s3, $s4 #i + j을 t1에 저장
sub $s0, $t0, $t1 #t0 t1을 합해 s0에 저장
MIPS - 피연산자
n LW (Load)
n 메모리를 레지스터에 적재
n SW (Store word)
n 레지스터에서 메모리로 데이터를 보내는 명령
n SW의 예
n lw $t0, 32($s3)
n lw $t0, 32($s3)는, 시작주소 S3에 32를 더하고 그 값을 t0에 할당
n add $t0, $s2, $t0
n sw $t0, 48($s3)
n 상수지원
n lw $t0, AddConstant4($s1) #$t0=constant 4
n add $s3, $s3, $t0 #$s3 = $s3 + $t0
MIPS - 레지스터 사용관례
MIPS 레지스터 사용관례
1번 : 어셈블러 전용으로 예약되어 있음
26,27 : 운영체제 전용으로 예약되어 있음.
MIPS - 구현
n MIPS에서의 명령어 실행
n 클럭이 뛴후 레지스터를 읽음, ALU는 바로 출력
n PC를 메모리로 보내고, Memory로부터 명령어 가져온 후,
명령어 필드를 보고, 두개의 레지스터를 읽음
n 레지스터 읽은후, 명령어가 ALU를 사용하는 이유
n 주소계산 : 참조명령어는 주소계산위해 ALU 사용
n 연산 : 산술/논리 명령어는 연산을 위해 ALU 사용
n 비교 : 분기명령어는 비교하기 위해 ALU 사용
n ALU 사용후 명령어 실행을 끝내기 위한 행동
n 참조명령어 : 메모리에 접근한후
n 저장명령어 : 메모리에 접근한후 (데이터저장)
n 적재명령어 : 메모리에 접근한후 (데이터읽기)
n 산술논리 명령어 / 적재명령어 : ALU나 메모리에 온 데이터를
레지스터에 쓰고난후
n 분기명령어 : 다음 명령어의 주소를 갖게한후
MIPS 구현
종류 명령어 예 의미 설명
산술
add add $s1, $s2, $s3 $s1 = $s2 + $s3
피연산자 3개;
오버플로우 탐지
subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3
add immediate addi $s1, $s2, 100 $s1 = $s2 + 100
+ 상수; 오버플로우
탐지
add unsigned addu $s1, $s2, $s3 $s1 = $s2 +$s3
피연산자 3개;
오버플로우 무시
subtract unsigned subu $s1, $s2, $s3 $s1 = $s2 - $s3
add immediate
unsigned
addiu $s1, $s2, 100 $s1 = $s2 + 100
+ 상수; 오버플로우
무시
move from
coprocessor register
mfc0 $s1, $epc $s1 = $epc
예외 PC와 다른 특수
레지스터의 복사
논리연산
and and $s1, $s2, $s3 $1 = $2 & $3
피연사자 3개; bitwise-
AND
or or $s1, $s2, $s3 $1 = $2 | $3
피연산자 3개; bitwise-
OR
and immediate andi $s1, $s2, 100 $1 = $2 & 100 상수와 bitwise-AND
or immediate ori $s1, $s2, 100 $1 = $2 | 100 상수와 bitwise-OR
shift left logical sll $s1, $s2, 10 $1 = $2 << 10 상수만큼 좌측이동
shift right logical srl $s1, $s2, 10 $1 = $2 >> 10 상수만큼 우측이동
MIPS - R형식
n R형식 특징
n 명령어의 길이를 같게 하되, 명령어 종류에 따라 형식을 다르게 함
n 명령어 필드
n op : 연산자(opcode)
n rs : 첫번째 근원지(source) 레지스터
n rs : 두번째 근원지 피연산자 레지스터
n rd : 목적지 레지스터
n shamt : 자리이동량
n funct : 기능, op 필드에서 연산 종류를 구체적으로 지정함
op rs rt rd shamt funct
6 bits 6 bits5 bits 5 bits 5 bits 5 bits
MIPS의
명령어필드
MIPS - R형식
add $t0, $s1, $s2
special $s1 $s2 $t0 0 add
0 17 18 8 0 32
000000 10001 10010 01000 00000 100000
000000100011001001000000001000002 = 0232402016
십진수
이진수
MIPS - I형식
n I 형식 추가
n R형식만으로 명령어를 표현하기 어려워서 I형식이 추가됨
n 수치연산과 데이터 전송명령어에 사용됨
n 16비트 주소를 사용하므로, rs
op rs rt constant or address
6 bits 5 bits 5 bits 16 bits
MIPS – 데이터패스 요소
n 조합소자(조합회로)
n 입력에 대한 출력을 냄
n 예 : ALU
n 상태소자(순차회로)
n 2개의 입력과 1개의 출력을 가짐.
n 상태(state)를 갖는다.
n 예: 메모리, 데이터 메모리 및 레지스터
MIPS - R형식 명령의 데이터패스 동작
add $t1, $t2, $t3 명령어후 활성화된 제어선의 모습
MIPS - R형식 명령의 데이터패스 설명
n 명령어 실행은 한클럭 사이클에 일어나며, 4단계로 나눌 수 있음
n 예 : add $t1, $t2, $t3의 R형식 명령어의 데이터패스 동작
n 1. Instruction을 Instruction Memory에서 가져오고 PC값을 증가시킨다.
n 2. 두 레지스터 $t2, $t3를, Register file(접근할 레지스터 번호를
지정함으로서 읽고 쓸 수 있는 레지스터들의 집합)로 부터 읽는다.
n 3. ALU가 연산을 하게 되는데, 연산된 결과를 저장하기 위한 $t1 선택을
위한 과정으로, 명령어의 funct 필드(비트 5:0)의 기능코드를 참조해 ALU
의 제어신호를 만든다.
n 4. Control의 ALUOp 제어유닛의 입력 유닛인 OPCODE(31:26)를 보고
RegDst라고 하는, 멀티플렉스 제어 신호를 출력으로 보낸다. RegDst를
보고, 명령어 비트 15:11인 (ALU의 결과 값이 레지스터 파일에
기록되는데) 목적지 레지스터에 해당되는 $t1를 선택하고 $t2, $t3의
결과값을 $ t1에 저장함
References
n Computer Architecture A Quantitative Approach (5th edition)

More Related Content

Similar to MIPS CPU의 이해 (입문)

2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summitTae Young Lee
 
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자SesangCho
 
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹GangSeok Lee
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHyo jeong Lee
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장HolyTak
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 
[엄마정치 메이커팀] 두번째 모임_2018_01_27
[엄마정치 메이커팀] 두번째 모임_2018_01_27[엄마정치 메이커팀] 두번째 모임_2018_01_27
[엄마정치 메이커팀] 두번째 모임_2018_01_27yuna cho
 
Let's geek! (1)
Let's geek! (1) Let's geek! (1)
Let's geek! (1) nerdsday
 
딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)Tae Young Lee
 
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습Seongho Park
 
TestBCD2017-1(answer)
TestBCD2017-1(answer)TestBCD2017-1(answer)
TestBCD2017-1(answer)Yong Heui Cho
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw정완 전
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw정완 전
 

Similar to MIPS CPU의 이해 (입문) (20)

2017 tensor flow dev summit
2017 tensor flow dev summit2017 tensor flow dev summit
2017 tensor flow dev summit
 
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
PS 향유회 세미나 - Python을 서브언어로 편하게 PS해보자
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹
[2011 CodeEngn Conference 05] ashine - 안드로이드 리눅스에서의 시스템 해킹
 
CDVS/CDVA
CDVS/CDVACDVS/CDVA
CDVS/CDVA
 
컴퓨터개론04
컴퓨터개론04컴퓨터개론04
컴퓨터개론04
 
Howto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear RegressionHowto_Tensorflow+Linear Regression
Howto_Tensorflow+Linear Regression
 
Windosw via c 스터디2장
Windosw via c 스터디2장Windosw via c 스터디2장
Windosw via c 스터디2장
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
[엄마정치 메이커팀] 두번째 모임_2018_01_27
[엄마정치 메이커팀] 두번째 모임_2018_01_27[엄마정치 메이커팀] 두번째 모임_2018_01_27
[엄마정치 메이커팀] 두번째 모임_2018_01_27
 
Let's geek! (1)
Let's geek! (1) Let's geek! (1)
Let's geek! (1)
 
딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)딥러닝을 위한 Tensor flow(skt academy)
딥러닝을 위한 Tensor flow(skt academy)
 
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
[기술세미나 2차시] Ia 32 레지스터 분석 및 abex, crackme를 통한 stack 파라미터 전달 실습
 
TestBCD2017-1(answer)
TestBCD2017-1(answer)TestBCD2017-1(answer)
TestBCD2017-1(answer)
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
Ch09
Ch09Ch09
Ch09
 
System+os study 2
System+os study 2System+os study 2
System+os study 2
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
Amugona study 1회 jjw
Amugona study 1회 jjwAmugona study 1회 jjw
Amugona study 1회 jjw
 
ice_grad
ice_gradice_grad
ice_grad
 

More from Jin wook

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개Jin wook
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석Jin wook
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Jin wook
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Jin wook
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Jin wook
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정Jin wook
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDJin wook
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) Jin wook
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개Jin wook
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용Jin wook
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여Jin wook
 

More from Jin wook (13)

자연어처리 소개
자연어처리 소개자연어처리 소개
자연어처리 소개
 
클린 아키텍처 재해석
클린 아키텍처 재해석클린 아키텍처 재해석
클린 아키텍처 재해석
 
Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발Angular2를 위한 컴포넌트 분석과 개발
Angular2를 위한 컴포넌트 분석과 개발
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트
 
Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발Angular2를 활용한 컴포넌트 중심의 개발
Angular2를 활용한 컴포넌트 중심의 개발
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
Mongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUDMongo DB로 진행하는 CRUD
Mongo DB로 진행하는 CRUD
 
아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift) 아파치 쓰리프트 (Apache Thrift)
아파치 쓰리프트 (Apache Thrift)
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
파이썬(Python) 소개
파이썬(Python) 소개파이썬(Python) 소개
파이썬(Python) 소개
 
빅 데이터 개요 및 활용
빅 데이터 개요 및 활용빅 데이터 개요 및 활용
빅 데이터 개요 및 활용
 
AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여AngularJS의 개발방식에 대하여
AngularJS의 개발방식에 대하여
 

MIPS CPU의 이해 (입문)

  • 1. The Hardware/Software Interface MIPS CPU의 이해 (입문) Instruction & Overview JEONG JIN WOOK 2015. 10. 22
  • 2. Index n MIPS 명령어 n beq, bne n 순환문 n 대소비교.. n MIPS 관련용어 n Register, ALU n Word, ALU n Control Unit, Register Set n PC, Mux .. n MIPS 개괄적 이해 n 핵심명령어 n CPU Overview, 피연산자, 레지스터 사용관례 n MIPS 구현, R형식, I형식 n MIPS의 데이터패스 예
  • 3. MIPS 명령어 – beq, bne n Conditional Branch n beq register, register2, L1 n register, register2가 같으면 L1로 이동 n beq = branch if equal n bne register, register2, L1 n register, register2가 다르면 L1로 이동 n bne = branch not equal
  • 4. MIPS 명령어 - 순환문 n while(save[i]==k) i+=1;의 MIPS 어셈블리 코드 작성 n 주소계산후, 임시 레지스터에 t1의 값을 넣은후, 조건검사후, != 으면 1을 더한후, 처음으로 다시 돌아간다. Loop : sll $t1, $t3, 2 # sll은 shift left logical의 약자로, 왼쪽자리이동을 말함 # $t3를 좌측으로 2비트 이동하면 4를 곱한것과 같음 이를 직관적으로 표현하면, $t1 = i * 4 와 같음 add $t1, $t1, $s6 # $s6의 베이스 주소값을 더함. lw $t0, 0($t1) # 임시 레지스터에 저장 bne $t0, $s5, Exit # save[i]!=k이면 순환문을 빠져 나감 ADDI $S3, 3, 1 # I에 1을 더함 I=I+1 J Loop Exit: # 순환문의 끝에서 맨 앞의 Loop로 되돌아감.
  • 5. MIPS 명령어 – 두 변수간 대소비교 n slt (set on less than) n slt $t0, $s3, $s4 n $t0=1 if $s3 < $s4
  • 6. MIPS 명령어 – 프로시저 지원 n 프로시저 n procedure에 제공되는 인수에 따라 특정 작업을 수행하는 서브루틴 n jar (jump and link instruction) n jal ProcerdureAddress n 지정된 주소로 점프후 다음 명렁어의 주소를 ra register에 저장 n jr (jump register) n jr $ra n 저장된 주소로 무조건 점프 n $a0-$a3 인수레지스터에 전달할 인수값을 저장후, jal X 명령어를 이용해, 프로시저 X로 점프후, 계산결과를 $V0- $V1(반환되는 값을 가지는 레지스터2개)에 저장후 jr $ra(호출한곳의 복귀주소)명령으로 복귀
  • 7. MIPS 명령어 - 산술명령어 n MIPS의 산술명령어는 add 연산을 말하며 다음 형식을 가짐 n add a, b, c #주석 n b + c를 a에 저장하는 명령어 n 피연산자를 3개로 제안함으로서 간단한 설계를 유지함 n 여기서, instruction(연산자)는 add이며, operand(피연산자)는 a,b,c를 말함
  • 8. MIPS 관련용어 n 레지스터 n 레지스터는 순차회로이다. CPU 명령어는 레지스터 기반으로 동작. n 32Bit로 이루어짐 n $0, $1 .. $31 으로 이름지어 있음 n 순차회로는, 플립플롭이라는 메모리 소자가 있으며, 클럭 펄스가 들어오기 전에는 출력단에 변화가 없다. (이런 이유로, 메모리소자라함) n 레지스터(클럭필요)는 입력값 3이 바뀌더라도, 출력값 1이 변하지 않음
  • 9. MIPS 관련용어 n Word n 각 기억 장소에 저장되는 데이터 단위로서, CPU에 의해 한 번에 처리될 수 있는 비트들의 그룹 n ALU n 조합회로이다. 클럭이 필요없으며, 입력값이 바뀌면, 그 값이 바로 반영됨. 다음 클럭이 인가되어야만, 1의 값이 변하게됨. n 각종 산술 연산들과 논리 연산들을 수행하는 회로들로 이루어진 하드웨어 모듈로, 산술연산(+, -, ×, ÷)과 논리연산(AND, OR, NOT, XOR 등) 수행 n Control Unit n ALU에서 수행할 동작지시 n 레지스터간의 데이터 전송 감시 n 명령어를 해석하고 실행하기 위한 제어 신호들(control signals)를 순차적으로 발생하는 H/W 모듈
  • 10. MIPS 관련용어 n Register Set n 명령어 수행 동안 발생하는 임시 데이터 저장 n PC (Program Counter) n 현재 명령어의 주소나 다음에 인출할 명령어를 가짐 n 명령어를 저장하고 주소가 주어지면 해당 명령어를 목적지 주소로 갱신 n PC를 다음 명령어 주소로 증가 n ALU를 통해 다음 명령어 주소로 증가하는 덧셈기 구현가능
  • 11. MIPS 관련용어 n MUX n 레지스터 선택 및 선택된 레지스터 정보를 ALU로 출력하는 선택 논리회로
  • 12. MIPS 관련용어 n 인스트럭션 n CPU가 해야할 작업을 지시하는 정형화된 언어 n C프로그램은 컴파일을 거쳐 Intruction 형태로 바뀜 n CPU는 일련의 매커니즘에 의해 메모리에서 순서대로 Instruction을 읽어오며, 이 과정을 Instruction Patch라고 함 n Instruction은 연산종류를 의미하는 Operation 입력값과 대상이 되는 값인 Operand를 지정하며, Operation 입력은 Operation Code (OP Code, 연산자)라고 부름 n I-타입 Instruction n 연산결과가 레지스터에 저장되며, 연산의 입력값인 두 Operand는 Instruction에 직접 상수형태로 기록될 수 있다. n R-타입 Instruction n Operand값이 임의의 레지스터에 저장되고 Instruction에는 이 Register를 지정하는 값이 들어갈 수 있다.
  • 13. MIPS - 개요 n MIPS n Microprocessor without Interlocked Pipeline Stages n 밉스 테크놀로지에서 개발한 RISC ISA n RISC : Reduced Instruction Set Computer n RISC는 CPU 명령어수를 줄여 H/W구조를 간단히 만드는 방식이다. n ISA : Instruction Set Architecture) n 컴퓨터 프로그램과 H/W간 인터페이스에 대한 완전한 명세 도시바에서 생산한 MIPS R4400 프로세서.
  • 14. n 여러 기능 유닛과 그들 사이의 연결에 초점 n multiplexor 추가 필요 (근원지중 하나를 선택하여 목적지로 보내는 구성요소) MIPS - CPU Overview
  • 15. MIPS - 핵심 명령어 n Memory reference: lw, sw n Arithmetic/logical: add, sub, and, or, slt n Control transfer: beq, j
  • 16. MIPS - 피연산자 n MIPS에서 Register n 32 bit를 word단위로 처리 n 산술명령어는 32bit register중 하나여야함 n 레지스터 개수는 32개로 제한함으로서,전 전기 신호 거리를 짧게 함으로서, 클럭 사이클 시간을 단축시키기 위함 n 레지스터 사용예 n C 코드로, f = (g + h) - (i + j); 을 하는 프로그램이 있을때, n f,g,h,i,j가 레지스터 $s0, $s1, $s2, $s3, $s4 에 할당되었다는 전제하에 MIPS code로 다음과 같이 나타낼 수 있음 n add $t0, $s1, $s2 #g + h을 t0에 저장 add $t1, $s3, $s4 #i + j을 t1에 저장 sub $s0, $t0, $t1 #t0 t1을 합해 s0에 저장
  • 17. MIPS - 피연산자 n LW (Load) n 메모리를 레지스터에 적재 n SW (Store word) n 레지스터에서 메모리로 데이터를 보내는 명령 n SW의 예 n lw $t0, 32($s3) n lw $t0, 32($s3)는, 시작주소 S3에 32를 더하고 그 값을 t0에 할당 n add $t0, $s2, $t0 n sw $t0, 48($s3) n 상수지원 n lw $t0, AddConstant4($s1) #$t0=constant 4 n add $s3, $s3, $t0 #$s3 = $s3 + $t0
  • 18. MIPS - 레지스터 사용관례 MIPS 레지스터 사용관례 1번 : 어셈블러 전용으로 예약되어 있음 26,27 : 운영체제 전용으로 예약되어 있음.
  • 19. MIPS - 구현 n MIPS에서의 명령어 실행 n 클럭이 뛴후 레지스터를 읽음, ALU는 바로 출력 n PC를 메모리로 보내고, Memory로부터 명령어 가져온 후, 명령어 필드를 보고, 두개의 레지스터를 읽음 n 레지스터 읽은후, 명령어가 ALU를 사용하는 이유 n 주소계산 : 참조명령어는 주소계산위해 ALU 사용 n 연산 : 산술/논리 명령어는 연산을 위해 ALU 사용 n 비교 : 분기명령어는 비교하기 위해 ALU 사용 n ALU 사용후 명령어 실행을 끝내기 위한 행동 n 참조명령어 : 메모리에 접근한후 n 저장명령어 : 메모리에 접근한후 (데이터저장) n 적재명령어 : 메모리에 접근한후 (데이터읽기) n 산술논리 명령어 / 적재명령어 : ALU나 메모리에 온 데이터를 레지스터에 쓰고난후 n 분기명령어 : 다음 명령어의 주소를 갖게한후
  • 20. MIPS 구현 종류 명령어 예 의미 설명 산술 add add $s1, $s2, $s3 $s1 = $s2 + $s3 피연산자 3개; 오버플로우 탐지 subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 + 상수; 오버플로우 탐지 add unsigned addu $s1, $s2, $s3 $s1 = $s2 +$s3 피연산자 3개; 오버플로우 무시 subtract unsigned subu $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate unsigned addiu $s1, $s2, 100 $s1 = $s2 + 100 + 상수; 오버플로우 무시 move from coprocessor register mfc0 $s1, $epc $s1 = $epc 예외 PC와 다른 특수 레지스터의 복사 논리연산 and and $s1, $s2, $s3 $1 = $2 & $3 피연사자 3개; bitwise- AND or or $s1, $s2, $s3 $1 = $2 | $3 피연산자 3개; bitwise- OR and immediate andi $s1, $s2, 100 $1 = $2 & 100 상수와 bitwise-AND or immediate ori $s1, $s2, 100 $1 = $2 | 100 상수와 bitwise-OR shift left logical sll $s1, $s2, 10 $1 = $2 << 10 상수만큼 좌측이동 shift right logical srl $s1, $s2, 10 $1 = $2 >> 10 상수만큼 우측이동
  • 21. MIPS - R형식 n R형식 특징 n 명령어의 길이를 같게 하되, 명령어 종류에 따라 형식을 다르게 함 n 명령어 필드 n op : 연산자(opcode) n rs : 첫번째 근원지(source) 레지스터 n rs : 두번째 근원지 피연산자 레지스터 n rd : 목적지 레지스터 n shamt : 자리이동량 n funct : 기능, op 필드에서 연산 종류를 구체적으로 지정함 op rs rt rd shamt funct 6 bits 6 bits5 bits 5 bits 5 bits 5 bits MIPS의 명령어필드
  • 22. MIPS - R형식 add $t0, $s1, $s2 special $s1 $s2 $t0 0 add 0 17 18 8 0 32 000000 10001 10010 01000 00000 100000 000000100011001001000000001000002 = 0232402016 십진수 이진수
  • 23. MIPS - I형식 n I 형식 추가 n R형식만으로 명령어를 표현하기 어려워서 I형식이 추가됨 n 수치연산과 데이터 전송명령어에 사용됨 n 16비트 주소를 사용하므로, rs op rs rt constant or address 6 bits 5 bits 5 bits 16 bits
  • 24. MIPS – 데이터패스 요소 n 조합소자(조합회로) n 입력에 대한 출력을 냄 n 예 : ALU n 상태소자(순차회로) n 2개의 입력과 1개의 출력을 가짐. n 상태(state)를 갖는다. n 예: 메모리, 데이터 메모리 및 레지스터
  • 25. MIPS - R형식 명령의 데이터패스 동작 add $t1, $t2, $t3 명령어후 활성화된 제어선의 모습
  • 26. MIPS - R형식 명령의 데이터패스 설명 n 명령어 실행은 한클럭 사이클에 일어나며, 4단계로 나눌 수 있음 n 예 : add $t1, $t2, $t3의 R형식 명령어의 데이터패스 동작 n 1. Instruction을 Instruction Memory에서 가져오고 PC값을 증가시킨다. n 2. 두 레지스터 $t2, $t3를, Register file(접근할 레지스터 번호를 지정함으로서 읽고 쓸 수 있는 레지스터들의 집합)로 부터 읽는다. n 3. ALU가 연산을 하게 되는데, 연산된 결과를 저장하기 위한 $t1 선택을 위한 과정으로, 명령어의 funct 필드(비트 5:0)의 기능코드를 참조해 ALU 의 제어신호를 만든다. n 4. Control의 ALUOp 제어유닛의 입력 유닛인 OPCODE(31:26)를 보고 RegDst라고 하는, 멀티플렉스 제어 신호를 출력으로 보낸다. RegDst를 보고, 명령어 비트 15:11인 (ALU의 결과 값이 레지스터 파일에 기록되는데) 목적지 레지스터에 해당되는 $t1를 선택하고 $t2, $t3의 결과값을 $ t1에 저장함
  • 27. References n Computer Architecture A Quantitative Approach (5th edition)

Editor's Notes

  1. 실행시간 대신에 쓸 수 있는 척도로, 프로그램 실행속도의 단위인, MIPS(Microprocessor without Interlocked Pipeline Stages)와 다름...