일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Class
- html
- for
- python
- Java
- system
- MIPS
- github
- Pipelining
- Linux
- DoM
- web
- data structure
- MacOS
- control
- php
- CSS
- architecture
- mysql
- XML
- while
- javascript
- instruction
- DB
- computer
- function
- DATAPATH
- DS
- Algorithm
- react
- Today
- Total
목록computer (83)
YYYEJI
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/4C2eQ/btrM0oMu0MM/8qXlfpSvjbEyKPoCdFxhu1/img.png)
JUMP - 16bits 새로운 target 주소(PC)로 점프하는 instruction입니다. Ex) J label → PC = target address (Memory addressing mode와 굉장히 밀접한 관련이 있다.) op = 2 word address (Jump instruction의 op code는 2) Jump Register - 26bits JR $ra # PC ← $ra ( $ra → 31 register) op = 0 rs = 31 rt = 0 rd = 0 shamt = 0 func = 8 (R type 이기 때문에 op code는 0) (function code가 8이면 JR instruction) ($ra가 31번째 있기 때문에 rs가 31번) (나머지는 0으로 채워줌) Ju..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ciSwtY/btrMXIkl09E/ZA1Jt3j95Kk2XCrcP8lz6K/img.png)
BEQ와 BNE로 같다(==)와 다르다(!=)라는 수식을 사용할 수 있지만 작다() 등은 어떻게 표현할 수 있을까요 ? 그렇게 MIPS에서 특별하게 만들어진 새로운 instruction이 있습니다. 바로 slt instruction 입니다. (Set less than) Ex 1) slt $t0, $s1, $s2 # if $s1
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GWrX2/btrMWecM0LA/T7j4URn9mxFrWEAe0VowG1/img.png)
① BEQ - Branch if Equal Ex) BEQ $s1, $s2, label # if($s1 == $s2) PC op = 4 rs = 17 rt = 18 offset (word count) $s1의 값과 $s2의 값이 같으면 label의 값이 계산되어서 PC에 들어갑니다. ② BNE - Branch if Not Equal Ex) BNE $s1, $s2, label # if($s1 != $s2) PC op = 5 rs = 17 rt = 18 offset (word count) $s1의 값과 $s2의 값이 다르면 label의 값이 계산되어서 PC에 들어갑니다. ◡̈
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VWZ7s/btrMUS2vTYA/oa3gXo5WuylLmJ5411rrG0/img.png)
① Load Memory → Register Ex) LW $s1, 8($s0) # $s1 ← Memory[$s0 + 8] ② Store Register → Memory Ex) SW $s1, 12($s0) # Memory[$s0 + 12] ← $s1 C code를 assembly code로 바꾸는 예제를 살펴보겠습니다. C code A[8] = a + A[8] Assembly code # A[0]의 주소가 $s3에 있다고 가정 # a의 값은 $s2에 있다고 가정 lw $t0, 32($s3) # A[8]은 array의 8번째 이면서 4bytes씩 할당되어 있기 때문에 4*8위치에 있는 $s3가 됩니다. # $t0 ← A[8] add $t0, $s2, $t0 # $t0 ← $s0 + $t0 sw $t0, 32..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bgtZ5X/btrMXiMMGOR/UMy4krnHa5zFYwwVVdkCBK/img.png)
① Arithmetic Instruction ADD $s0, $s1, $s2 # $s0 ← $s1 + $s2 ADDI $s0, $s1, 100 # $s0 ← $s1 + 100 SUB $ s0, $s1, $s2 # $s0 ← $s1 - $s2 MULT $s1, $s2 # Hi, Lo ← $s1 * $s2 DIV $s1, $s2 # Hi, Lo ← $s1 / $s2 MFHI $s1 # $s1 ← Hi MFLO $s1 # $s1 ← Lo ( MFHI → Move From High, MFLO → Move From Low ) ② Logical Instructions AND $s0, $s1, $s2 # $s0 ← $s1 bitwise-AND $s2 OR $s0, $s1, $s2 # $s0 ← $s1 bitwise-..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lkPdT/btrMU5ggV75/k7E98ffhwDKq09o5SgVPSk/img.png)
Mips에서 컴퓨터 구조가 만들어질 때 사용된 4가지 원칙에 대해서 알아보아요. $ - register MPIS는 ① Maximize performance (최대화된 기능) ② Minimize cose (최소화된 비용) ③ Reduce design time (디자인 시간 감소) 를 목표로 하고 있습니다. 이 목표에 따른 4가지 원칙이 있는데 같이 알아보아요. ① To be simple, it should be regular. 심플하기 위해서는, 규칙적이여야 한다. (규칙적 → 심플, 심플 → 목표) Ex) 3개의 Operand가 있고 destination이 앞으로 오도록 한다. ADD C, A, B ② Smaller is faster. ( MIPS - register addressing mode ) re..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dxgMjy/btrMWQv1qUu/d53N3PC820TFgveKrKzOik/img.png)
간단하게 register에 대해서 설명해 드리겠습니다. Mip에서의 resister model입니다. (간단하게 그려놓은 모습입니다.) 0 $ zero constant 0 1 $ at reserved for assembler 2 $v0 return values 3 $v1 4 $a0 arguments 5 $a1 6 $a2 7 $a3 8 $t0 temporary ... 15 $t7 16 $s0 permanent ... 23 $s7 24 $t8 25 $t9 26 $k0 27 $k1 28 $gp global pointer 29 $sp stack pointer 30 $fp frame pointer 31 $ra return address 0~1은 compiler에서 신경쓰는 부분이기 때문에 우리는 신경쓰지 않아도 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bBFJAi/btrMUjMXxnD/q7TlpSAGjTZdwtcZg5zggk/img.png)
MIPS, register에 대해서 알아보아요 ! ① Interger register은 32 x 32 bits General Purpose Registers로 되어 있습니다. ② 일반적으로 float는 64bits 이기 때문에 아래와 같이 생겼습니다. Even number쪽인 오른쪽은 less-significant word이고 Odd number인 왼쪽은 more-significant word입니다. ③ HI(High register)와 LO(Low register)도 있고, 각각은 32bits로 구성되어 있습니다. 곱하기 연산을 할 때 최소 64bits의 데이터가 나오기 때문에 HI와 LO register을 사용합니다. 나누기 연산을 할 땐 몫(Quotient)와 나머지(Remainder)을 각가의 H..