Previous chapter
Conditional Operation
์กฐ๊ฑด์ด ๋ง์ ๊ฒฝ์ฐ labeled๋ ์ธ์คํธ๋ญ์
์ผ๋ก branchํ๋ค.
beq rs, rt, L1 #if(rs == rt) branch to instruction labeled L1;
bne rs, rt, L1 #if(rs != rt) branch to instruction labeled L1;
j L1 #jump to L1
Assembly
๋ณต์ฌ
beq๋ rs์ rt์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์, bne๋ rs์ rt์ ๊ฐ์ด ๊ฐ์ง ์์ ๊ฒฝ์ฐ ๋ผ๋ฒจ๋ก ์ด๋ํ๋ค.
example
๋ค์ ์ฝ๋์์ f,g,h,i,j๋ ๋ณ์๊ณ ๊ฐ๊ฐ์ ๋ ์ง์คํฐ $s0๋ถํฐ $s4๊น์ง์ ํด๋นํ๋ค. ์๋์ C์ธ์ด if ๋ฌธ์ฅ์ ์ปดํ์ผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ๋์จ๋ค.
if (i==j) f = g + h;
else f = g - h;
C
๋ณต์ฌ
beq $s3, $s4, Then
sub $s0, $s1, $s2
j Exit
Then: add $s0, $s1, $s2
Exit:
Assembly
๋ณต์ฌ
bne $s3, $s4, Else
add $s0, $s1, $s2
j Exit
Else: sub $s0, $s1, $s2
Exit:
Assembly
๋ณต์ฌ
beq๋ฒ์ ผ๊ณผ bne๋ฒ์ ์ด๋ค.
Loop Statements
Compiling Loop Statements
while (save[i] == k)
i += 1;
C
๋ณต์ฌ
i์ k๊ฐ ๋ ์ง์คํฐ $3์ $s5์ ํ ๋น๋์๊ณ ๋ฐฐ์ด save์ ์์์ฃผ์๊ฐ $s6์ ์ ์ฅ๋์์ ๋, C ๋ฌธ์ฅ์ ํด๋นํ๋ ์ด์
๋ธ๋ฆฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
Loop:sll $t1, $s3, 2
add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 1
j Loop
Exit:
Assembly
๋ณต์ฌ
๋ฐฐ์ด์ด๋ ๊ตฌ์กฐ์ฒด์ ๊ฐ์ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฏ๋ก ๋ฐ์ดํธ์ฃผ์๋ฅผ ์ฌ์ฉํด์ผํจ์ ๊ธฐ์ตํ๋ผ.
์ด๋ฅผ ์ํด sll๋ฅผ ์ฌ์ฉํ์ฌ 4๋ฅผ ๊ณฑํด์ค๋ค.
์ดํ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ด๋๋ ์ค๋ฅผ ๋จผ์ ๊ณ์ฐํ์ฌ t1์ ๋ฎ์ด์์ด ํ, lw๋ฅผ ์ฌ์ฉํ๋ค.
lw $t1 $t1($s6)
Assembly
๋ณต์ฌ
์ดํ ๋ฃจํ๋ฅผ ์งํํด์ฃผ๋ฉด ๋๋ค.
์ ์ฝ๋๋ sll์ ํตํด์ ๋จผ์ ๋ฐ์ดํธ ์ฃผ์ํ๋ฅผ ํ ํ ๊ณ์ฐ์ ์งํํ๋ค. ๊ทธ๋ฌ๋ ์คํ์ผ์ ๋ฐ๋ผ์ addi์ 1์ด ์๋ 4๋ฅผ ๋ฃ๋ ๋ฐฉ์๋ ์ถฉ๋ถํ ๊ฐ๋ฅํ ์ด์ผ๊ธฐ๋ค.
sll $t1, $s3, 2
Loop: add $t1, $t1, $s6
lw $t0, 0($t1)
bne $t0, $s5, Exit
addi $s3, $s3, 4 ?
Assembly
๋ณต์ฌ
Basic Blocks
์ธ์คํธ๋ญ์
์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋์ด์์ผ๋, ๋ชจ๋ ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋์ง๋ ์์!
โข
์กฐ๊ฑด๋ฌธ์ด๋ ๋ฃจํ์ ๋ฐ๋ผ์ ์ผ๋ถ ์ฝ๋๋ฅผ ๋ฐ์ด๋์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์!
โข
์ฆ ๋ช
๋ น์ด ์์ ๋ค์ด๊ฐ๋ค๊ฐ ๋์๋ค ํ๋ ๊ตฌ๋ฉ์ด ์๊ฒจ์ ์ฝ๋๋ฅผ ํด์ํ๊ธฐ ํ๋ฆ
๊ธฐ๋ณธ๋ธ๋ก(basic block)์ด๋ ๋ถ๊ธฐ ๋ช
๋ น์ ํฌํจํ์ง ์์ผ๋ฉฐ ๋ถ๊ธฐ ๋ชฉ์ ์ง๋ ๋ ์ด๋ธ๋ ์๋ ์ํ์ค์ด๋ค.
โข
๋ค๋ง ๋ถ๊ธฐ ๋ช
๋ น์ด ๊ธฐ๋ณธ ๋ธ๋ญ ๋งจ ๋์๋ ๋ฌ๋ ค์์ ์ ์๋ค.
MIPS Control Flow Instructions
bne $s0, $s1, Lbl #go to Lbl if $s0!=$s1
beq $s0, $s1, Lbl #go to Lbl if $s0=$s1
Assembly
๋ณต์ฌ
โข
์ธ์คํธ๋ญ์
ํฌ๋งท(I ํฌ๋งท์ด๋ค!)
ํ์ฌ๋ถํฐ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๊ฐ์ง๋ฅผ 16bit์ ์๋ก ๋ํ๋ธ๋ค!
if (i==j) h = i + j;
bne $s0, $s1, Lbl1
add $s3, $s0, $s1
Lbl1: ...
Assembly
๋ณต์ฌ
Specifying Branch Destinations
๋ ์ง์คํฐ(Program Counter)์ 16๋นํธ ์คํ์
์ ๋ํด์ ์ฌ์ฉํ๋ค.
โข
MIPS์์๋ PC๊ฐ (PC+4)ํ ์์น์์ ์คํ์
์ ๋ํด์ ๊ณ์ฐํ๋ค.
์คํ์
์ด ๋ํ๋ด๋ ๊ฒ์ ์๋ ()
Greater and Less than
๊ฐ์์ง ๋ค๋ฅธ์ง ๋น๊ตํ๋ ๊ฒ์ด ์๋ง๋ ๊ฐ์ฅ ํํ ๊ฒ์ฌ์ด๋, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ๋ ๋ณ์๊ฐ์ ๋์ ๋น๊ต๊ฐ ํ์ํ ๋๋ ์๋ค.
MIPS์์๋ slt๋ฅผ ์ ๊ณตํ๋ค.
slt $t0, $s3, $s4 #$t0 = 1 if $s3 < $s4
Assembly
๋ณต์ฌ
slt๋ ๋ ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ ํ, ๋๋ฒ์งธ ๋ ์ง์คํฐ ๊ฐ์ด ์ธ๋ฒ์งธ ๋ ์ง์คํฐ ๊ฐ๋ณด๋ค ์์ผ๋ฉด ์ฒซ๋ฒ์งธ ๋ ์ง์คํฐ ๊ฐ์ 1๋ก, ์๋๋ฉด 0์ผ๋ก ํ๋ ๋ช
๋ น์ด๋ค.
๋น์ฐํ๊ฒ๋ Iํ์
๋ช
๋ น์ด ๋ํ ์ ๊ณตํ๋ค.
slti rs, rt, Const
Assembly
๋ณต์ฌ
Combinations
MIPS ์ปดํ์ผ๋ฌ๋ slt, slti, beq, bne์ $zero๋ฅผ ์ด์ฉํด ๋ชจ๋ ๋น๊ต ์กฐ๊ฑด์ ๋ง๋ค ์ ์๋ค.
#less than blt $s1, $s2, L3 ... ํ๋์จ์ด๊ฐ ๊ตฌํํ๊ธฐ์ ๋๋ฌด ๋ณต์กํจ.
slt $t0, $s1, $s2 #s1<s2 then t0=1
bne $t0, $zero, L3๋
Assembly
๋ณต์ฌ
๋ค์ ์์ ๋ MIPS์์ blt๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค. blt๋ ํ๋์จ์ด ๋จ๊ณ์์ ๊ตฌํํ๊ธฐ์ ๋๋ฌด ๋ณต์กํ์ฌ, ๋น ๋ฅธ ๋ช
๋ น์ด 2๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ๋ค.
Beware when Compare
๋น๊ต๋ช
๋ น์ ๋ถํธ์๋ ์์ ๋ถํธ ์๋ ์ ๋๊ฐ์ง๋ฅผ ๋ค ๋ค๋ฃฐ ์ ์์ด์ผ ํ๋ค.
slt์ slti๋ signed number์ ๋ํด ๋ค๋ฃฌ๋ค. unsigned number๋ sltu์ sltiu๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
Signed ์ ์๋ฅผ Unsigned์ ์์ฒ๋ผ ๋ค๋ฃจ๋ฉด ๊ฒ์ฌ๋น์ฉ์ ๋ฎ์ถ ์ ์๋๋ฐ, ์ด ๊ฒ์ฌ๋ ์ธ๋ฑ์ค๊ฐ ์ค๋ฒํ๋ก์ฐ๋๋์ง ํ์ธํ๋ ๊ฒ์ฌ์ ๋ฑ ๋ง๋ค.
2์ ๋ณด์๋ก ํํ๋ Signed Number๊ฐ Unsigned Number๋ก ํด์๋๋ฉด ๋งค์ฐ๋งค์ฐ ํฐ ์๋ก ๋ณด์ด๊ฒ ๋๋ค.
MSB๊ฐ ๋ถํธ๋นํธ์์ ์์ฒญ ํฐ ๊ฐ์ผ๋ก ํด์์ ๊ด์ ์ด ๋ฐ๋๋ ์๊ฐ์ด๋ค.
Example
$s1 โฅ $t2์ด๊ฑฐ๋ $s1์ด ์์์ด๋ฉด IndexOutOfBounds๋ก ๋ถ๊ธฐํ๋ ์ฝ๋๋ฅผ ์ง๋ณด์.
sltu $t0, $s1, $t2 #if s1<t2 then t0 = 1,
beq $t0 $zero, IndexOutOfBounds
Assembly
๋ณต์ฌ
s1์ MSB๊ฐ 1์ด๋ฉด t2-s1์ MSB๊ฐ 0, ?????????????????????/
Q&A
greater than์ด๋ less than equal์์ 0๊ณผ ์์๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ?
โข
โ ๋ฌด์กฐ๊ฑด less than์ด ๋๋๋ก ์
์ฅ ๋ฐ๊พธ๊ธฐ
a > b?
b โค a?
-a > -b?
Next chapter