일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Prefix Sums
- c++
- CSS
- dataframe
- 강화학습
- margin
- 소수
- Design Pattern
- stl
- 백준
- Codility
- 포토샵
- spring
- 수학
- Gap
- 에라토스테네스의 체
- Photoshop
- Javascript
- grid
- skt membership
- SK바이오사이언스
- 통신사할인
- Flexbox
- pandas
- 확률
- c
- series
- align-items
- 상태
- 알고리즘
- Today
- Total
목록CS/컴퓨터 구조 (18)
sliver__

Swap C code를 assembly code로 바꾸기 ! void swap(int v[], int k) { int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; } The Procedure swap Register Allocation for swap v : $a0, k : $a1 temp : $t0 Code for the Body of the Procedure swap v의 array에 접근하기 전 ! int는 4bytes 이므로 k * 4를 수행해 접근해야한다 ! sll $t1, $a1,2 # reg $t1 = k * 4 add $t1, $a0,$t1 # reg $t1 = v + (k * 4) # reg $t1 has the address of v[k] lw..

Compiler Compiler는 C program을 assembly language로 변환 Assembler pseudoinstruction을 assembly language로 변환. Ex 1) move $t0,$t1 # register $t0 gets register $t1 ==> add $t0,$zero,$t1 # register $t0 gets 0 + register $t1 Ex2) Blt (branch on less than) => slt 과 bne로 변환 Assembly program을 개발한다면 pseudoinstruction을 쓰지만 실제 MIPS architecture와 성능을 고려한다면 real MIPS instruction을 알아야한다. MIPS assembler는 hexadecima..
Parellel execution에서는 data race를 조심해야 한다. multiple processor들이 하나의 data를 read/write할 때, 해당 동작은 atomic 해야만 한다. load link(ll)와 store conditional(sc) 명령어를 사용하여 공유 데이터의 read / write를 수행한다. Ex) again: addi $t0,$zero,1 ;copy locked value ll $t1,0($s1) ;load linked sc $t0,0($s1) ;store conditional beq $t0,$zero,again ;branch if store fails add $s4,$zero,$t1 ;put load value in $s4 sc 가 실패하면 0을 반환하고 다시 a..

32-Bits Immediate Operands load uppe immediate(lui) : 상위 16bits를 register에 저장하는 명령어 Quiz) 아래 32bits 상수를 $s0에 저장하는 assembly code는? 0000 0000 0011 1101 0000 1001 0000 0000 ==> lui $s0, 61 #upper 16 bits ori $s0, $s0, 2304 # lower 16 bits !! immediate instruction 사용에도 불구하고 큰 사이즈 memory address에 load / store 실패할 수 있다. 이를 대비해 $at(assembler temporary) register가 존재하고 사용 가능하다. Addressing in Branches and..

Quiz) 아래 코드를 assembly language로 바꾸면? void strcpy (char x[], char y[]) { int i; i = 0; while ((x[i] = y[i]) != ‘\0’) /* copy & test byte */ i += 1; } ==> strcpy: addi $sp, $sp, -4 sw $s0, 0($sp) add $s0, $zero, $zero L1: add $t1, $s0, $a1 # address of y[i] in $t1 lbu $t2, 0($t1) add $t3, $s0, $a0 sb $t2, 0($t3) beq $t2, $zero, L2 # y[i] == 0, go to L2 addi $s0, $s0, 1 j L1 L2: lw $s0, 0($sp) # Re..

Procedures는 software에서 abstraction을 구현하는 방법이다. Procedure의 절차는 아래와 같다. Procedure에 사용되는 register는 아래와 같다. jal : jump and link instruction ex) jal : PrecedureAddress link는 return address를 저장을 의미하고 $ra에 저장된다. jr : jump register ex) jr $ra Procedure 호출이 끝나고 return address로 돌아간다. Procedure 호출할 때 $a0 - $a3에 파라미터를 저장하고 jal 로 Procedure를 호출한다. Procedure의 결과값을 $v0, $v1에 저장하고 jr $ra를 통해 return address로 복귀한다..