Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- javascript
- html
- while
- php
- CSS
- github
- MIPS
- DATAPATH
- mysql
- DB
- system
- control
- Java
- data structure
- DoM
- python
- instruction
- function
- architecture
- Algorithm
- computer
- MacOS
- web
- XML
- Class
- for
- Pipelining
- DS
- react
- Linux
Archives
- Today
- Total
YYYEJI
[MIPS] Switch문 assembly code 본문
728x90
** C code를 기준 **
아래 코드를 MIPS assembly code로 변환해 보겠습니다.
switch (s) {
case0: a = a
case1: a = a + 1
case2: a + a + 2
default: a = a + 3
}
C to MIPS assembly
addi $t0, $zero, 1 # t0 = 1
addi $t1, $zero, 2 # t0 = 2
beq $s2, $zero, case0 # if (s == 0) goto case0
beq $s2, $t0, case1 # if (s == 1) goto case1
beq $s2, $t1, case2 # if (s == 2) goto case2
addi $s0, $zero, 3 # a = a + 3
j exit # goto exit
case0: addi $s0, $zero, 0 # a = a + 0
j exit # goto exit
case1: addi $s0, $zero, 1 # a = a + 1
j exit # goto exit
case2: addi $s0, $zero, 2 # a = a + 2
exit :
$s2 - s
$s0 - a
코드를 하나하나 살펴보면
addi $t0, $zero, 1 # t0 = 1
$t0에 1을 넣어줍니다.
이유는 s 값에 1이 있나 비교해주기 위해서 입니다.
addi $t1, $zero, 2 # t0 = 2
위와 마찬가지로 $t0에 2을 넣어줍니다.
이유는 s 값에 2이 있나 비교해주기 위해서 입니다.
beq $s2, $zero, case0 # if (s == 0) goto case0
beq $s2, $t0, case1 # if (s == 1) goto case1
beq $s2, $t1, case2 # if (s == 2) goto case2
s의 값을 각각의 0, 1, 2와 비교합니다.
0과 같으면 case0으로 가고,
1과 같으면 case 1,
2와 같으면 case2로 jump 됩니다.
addi $s0, $zero, 3 # a = a + 3
j exit
0, 1, 2 어떤 숫자와도 일치하지 않다면 default가 실행됩니다.
case0: addi $s0, $zero, 0 # a = a + 0
j exit # goto exit
case1: addi $s0, $zero, 1 # a = a + 1
j exit # goto exit
case2: addi $s0, $zero, 2 # a = a + 2
각각의 case에 맞춰 label이 이동되고,
statement에 맞춰서 수행됩니다.
수행이 끝나면 exit로 점프합니다.
◡̈
'Computer architectures' 카테고리의 다른 글
[MIPS] 1부터 N 사이의 3의 배수의 합을 구하는 assembly code (0) | 2022.10.20 |
---|---|
[MIPS] While문 assembly (0) | 2022.10.19 |
[MIPS] Array에서 값을 가져오고 저장하는 Assembly code (0) | 2022.10.19 |
[MIPS] Bit-wise AND(&)로 Logical AND(&&) 구하기 (2) | 2022.10.19 |
[CA] Simple Memory Layout (0) | 2022.10.13 |