Search
๐Ÿ’พ

Lecture 06 : 2.7

course
last review
2023/04/11
mastery
rookie
progress
not started
date
2023/03/29
4 more properties
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)ํ•œ ์œ„์น˜์—์„œ ์˜คํ”„์…‹์„ ๋”ํ•ด์„œ ๊ณ„์‚ฐํ•œ๋‹ค.
์˜คํ”„์…‹์ด ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ ์›Œ๋“œ (โˆ’215ย to+215โˆ’1-2^{15}\text{ to}+2^{15}-1)

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