일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- LG Aimers
- ChatGPT
- AI
- 회귀
- PCA
- 분류
- gpt
- 머신러닝
- supervised learning
- Machine Learning
- 해커톤
- LLM
- regression
- 티스토리챌린지
- 지도학습
- deep learning
- Classification
- OpenAI
- 딥러닝
- LG Aimers 4th
- LG
- GPT-4
- 오블완
Archives
- Today
- Total
SYDev
[컴퓨터 구조] Lecture 07: Instructions - Language of the Computer 본문
3학년 1학기 전공/컴퓨터 구조
[컴퓨터 구조] Lecture 07: Instructions - Language of the Computer
시데브 2024. 4. 5. 01:49경희대학교 컴퓨터공학부 김정욱 교수님의 컴퓨터 구조 강의 내용을 기반으로 한 정리글
Compiled MIPS Code Examples
- program variables에 registers 할당
- procedure code 작성
- 호출되면서 preserve registers
Swap Function
void swap(int v[], int k) {
int temp;
temp = v[k];
v[k] = v[k + 1];
v[k + 1] = temp;
}
1. Allocate registers to program variables
- v[], k -> $a0, $a1에 저장
- temp -> $t0
2. Produce code for the body of the procedure
swap:
sll $t1, $a1, 2 #k에 byte addressing, offset 계산
add $t1, $a0, $t1 #base address에 계산된 offset을 더하여 새로운 base address 지정
lw $t0, 0($t1) #temp에 v[k + 0] 저장
lw $t2, 4($t1) #t1값 t2에 저장 -> t1에 저장하면 base address 사용못함
sw $t2, 0($t1) #swap된 값 저장
sw $t0, 4($t1) #swap된 값 저장
jr $ra
-> base address 하나($t1)를 기준으로 바꿔주는 느낌!
3. Preserve registers across the procedure invocation
- saved registers 이용하지 않았으므로, preserve할 것이 없다
Sort Function
1. 레지스터에 변수 할당
- v[], n -> $a0, $a1
- i, j -> $s0, $s1
2. 함수 코드 작성
add $s0, $s0, $0 #i = 0
for1tst:
slt $t0, $s0, $a1 #i < n 만족하면 t0 = true
beq $t0, $0, exit1 #false이면 exit으로
#...
#(body of first for loop)
#...
addi $s0, $s0, 1 #i += 1
j for1tst #jump to test of outer loop
exit1:
addi $s1, $s0, -1
for2tst:
slti $t0, $s1, $0 #j < 0 true
bne $t0, $0, exit2 #이중부정 -> j < 0이면 점프
sll $t1, $s1, 2 #j에 byte addressing
add $t2, $a0, $t1 #t2에 v + (j * 4)
lw $t3, 0($t2) #t3 = v[j]
lw $t4, 4($t2) #t4 = v[j + 1]
slt $t0, $t4, $t3
beq $t0, $0, exit2
#body of second for loop
addi $s1, $s1, -1
j for2tst
exit2:
- sort의 argument인 v와 n 저장
add $s2, $a0, $0
add $s3, $a1, $0
add $a0, $s2, $0
add $a1, $s1, $0
addi $sp, $sp, -20
sw $ra, 16($sp)
sw $s3, 12($sp)
sw $s2, 8($sp)
sw $s1, 4($sp)
sw $s0, 0($sp)
exit1:
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $s2, 8($sp)
lw $s3, 12($sp)
lw $ra, 16($sp)
addi $sp, $sp, 20
Arrays vs. Pointers
array[]: 배열의 메모리 주소를 담고 있는 포인터, 실제 크기를 알 수 없음, 따라서 다른 매개변수를 통해 배열의 크기를 받아야 한다.
Swap&Sort Function 복기
- v[], k, temp -> a0, a1, t0
void swap(int v[], int k) {
int temp;
temp = v[k];
v[k] = v[k + 1];
v[k + 1] = temp;
}
sll $t1, $a1, 2 #k byte address
add $t1, $a0, $t1 #v[k]
lw $t0 0(t1) #temp에 v[k] lw
lw $t2 4(t1) #t2에 v[k + 1] lw
sw $t0 4(t1) #temp값 v[k + 1]에 sw
sw $t2 0(t1) #t2값 v[k]에 sw
jr $ra
- v[], n, i, j -> $a0, $a1, $s0, $s1
void sort(int v[], int n) {
int i, j;
for(i = 0; i < n; i += 1) {
for(j = i - 1; j >= 0 && v[j] > v[j + 1]; j -= 1) {
swap(v, j);
}
}
}
#saving registers
sort:
addi $sp, $sp, -20 #sp 5칸 아래로
sw $ra, 16($sp) #16(sp)에 ra 저장
sw $s3, 12($sp) #12(sp)에 s3(=a1) 저장
sw $s2, 8($sp) #8(sp)에 s2(=a0) 저장
sw $s1, 4($sp) #4(sp)에 s1 저장
sw $s0, 0($sp) #0(sp)에 s0 저장
#procedure body
#a0, a1 -> s2, s3에 저장
addi $s2, $a0, $0
addi $s3, $a1, $0
#for1sts 초기설정
add $s0, $s0, $0
for1sts:
#slt + beq(else면!) -> exit1으로
slt $t0, $s0, $0
beq $t0, $0, exit1
#for2sts 초기설정
addi $s1, $s0, -1
for2sts:
#slti + bne(여집합) = slti + beq -> exit2
slti $t0, $s1, 0
bne $t0, $0, exit2
#t1에 j byte addressing 저장
sll $t1, $s1, 2
#t2에 v[j] 저장
add $t2, $a0, $t1
#t3에 0(t2) 저장
lw $t3, 0($t2)
#t4에 4(t2) 저장
lw $t4, 4($t2)
#위치 바꾼 slt, beq -> exit2
slt $t0, $t4, $t3
beq $t0, $0, exit2
#swap에 들어가는 파라미터 저장 후, swap 진입
add $a0, $s2, $0
add $a1, $s1, $0
#inner loop 끝
addi $s1, $s1, -1
j for2sts
exit2:
#i += 1
addi $s0, $s0, 1
#for1sts로 점프
j for1sts
#restoring registers
exit1:
#resotring
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $s2, 8($sp)
lw $s3, 12($sp)
lw $s4, 16($sp)
#sp 위치 복귀
addi $sp, $sp, 2
#procedure return
jr $ra
'3학년 1학기 전공 > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] Lecture 09: Arithmetic for Computers (0) | 2024.04.13 |
---|---|
[컴퓨터 구조] Lecture 08: Instructions - Language of the Computer (0) | 2024.04.13 |
[컴퓨터 구조] Lecture 06: Instructions - Language of the Computer (0) | 2024.04.04 |
[컴퓨터 구조] 3주차 정리 (0) | 2024.03.22 |
[컴퓨터 구조] 1, 2주차 정리 (0) | 2024.03.19 |