๐ง ํผ์ฐ์ฐ์ (Operands)
์ฐ์ ๋ช ๋ น์ด์ ํผ์ฐ์ฐ์์๋ ์ ์ฝ์ด ์์ต๋๋ค.
๋ ์ง์คํฐ(register)์ ์ฃผ์ ํน์ ์์๋ง์ด ํด๋น ์์น์ ์ฌ ์ ์์ต๋๋ค.
RISC-V ์ปดํจํฐ๋ 32๊ฐ์ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ ์ง์คํฐ๋ 64๋นํธ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
(32๋นํธ ์ปดํจํฐ์ ๊ฒฝ์ฐ ๋ ์ง์คํฐ๋ 32๋นํธ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.)
๊ฐ๊ฐ์ ๋ ์ง์คํฐ๋ x0 ๋ถํฐ x31 ๊น์ง์ ์ฃผ์๋ฅผ ๊ฐ์ง๋๋ค.
์ฌ๊ธฐ์ ์๋(Word)๋ผ๋ ๋จ์ด๊ฐ ๋ฑ์ฅํ๋๋ฐ, ์๋๋ ์ปดํจํฐ์์์ ์ ๊ทผ ๋จ์์ด๋ฉฐ, ๋ ์ง์คํฐ์ ํฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ณธ๋์ ์๋ฏธ์๋ ๋ค๋ฅด๊ฒ ์ผ๋ฐ์ ์ผ๋ก Word๋ผ๊ณ ํ๋ฉด 32๋นํธ๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉฐ,
64๋นํธ ์ปดํจํฐ์์๋ Word๊ฐ 64๋นํธ์ด์ง๋ง Word๋ 32๋นํธ๋ผ๋ ์ธ์์ด ๊ฐํ๋ฏ๋ก,
64๋นํธ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด Double Word๋ผ๊ณ ํํํฉ๋๋ค.
๐ ์์
ํ๋ก๊ทธ๋จ ๋ณ์๋ฅผ ๋ ์ง์คํฐ์ ์ฐ๊ด์ํค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ์ ์๋ฌด์ ๋๋ค.
๋ค์ C ํ๋ก๊ทธ๋จ์ ์์๋ก ๋ณด๋ฉด
f = (g + h) - (i + j);
์ ์ฝ๋์์ ์ปดํ์ผ๋ฌ๊ฐ ๋ณ์ $f, \; g,\; h,\; i,\; j$ ๋ฅผ ๋ ์ง์คํฐ x19, x20, x21, x22, x23 ์ ๊ฐ๊ฐ ํ ๋นํ๋ค๊ณ ํ๊ฒ ์ต๋๋ค.
์ปดํ์ผ๋ RISC-V ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
add x5, x20, x21 // register x5 contains g + h
add x6, x22, x23 // register x6 contains i + j
sub x19, x5, x6 // f gets x5 - x6, which is (g + h) - (i + j)
โญ๏ธ ๋ ์ง์คํฐ ์ฃผ์ Convention
์ ์์์์ ์์ ์ฃผ์๋ก x5์ x6์ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ ์ง์คํฐ ์ฃผ์ Convention์ ๋ฐ๋ฅธ ๊ฒ์ ๋๋ค.
โญ๏ธ ๋ ์ง์คํฐ ๊ฐ์์ ์ ํ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๋ ๋ณ์์, ํ๋์จ์ด ๋ ์ง์คํฐ์ ํฐ ์ฐจ์ด์ ์ ๋ ์ง์คํฐ๋ ๊ฐ์๊ฐ ํ์ ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
ํ๋ ์ปดํจํฐ๋ ๋ณดํต 32๊ฐ์ ๋ ์ง์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ์ ๋ช ๋ น์ด์ ๋ชจ๋ ํผ์ฐ์ฐ์(Operands)๋ 32๊ฐ์ 64๋นํธ ๋ ์ง์คํฐ ์ค ํ๋์ฌ์ผ ํ๋ค๋ ์ ์ฝ์ด ์ถ๊ฐ๋ฉ๋๋ค.
๋ ์ง์คํฐ ๊ฐ์๋ฅผ 32๊ฐ๋ก ์ ํํ๋ ์ด์ ๋ ํ๋์จ์ด ๊ธฐ์ ์ ๋ฐํ์ด ๋๋ ์ค๊ณ ์์น ์ค ๋ ๋ฒ์งธ ์์น์์ ์ฐพ์ ์ ์์ต๋๋ค.
2. ์์ ๊ฒ์ด ๋ ๋น ๋ฅด๋ค
๋ ์ง์คํฐ๊ฐ ๋ง์์ง๋ฉด, ์ ๊ธฐ ์ ํธ๊ฐ ๋ ๋ฉ๋ฆฌ๊น์ง ์ ๋ฌ๋์ด์ผ ํ๋ฏ๋ก ํด๋ญ ์ฌ์ดํด ์๊ฐ์ด ๊ธธ์ด์ง๋๋ค.
๐ง ๋ฉ๋ชจ๋ฆฌ ํผ์ฐ์ฐ์ (Memory Operands)
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ์ง๊ธ๊น์ง ์ดํด๋ณธ ์์ ๋ค์ฒ๋ผ ๊ฐ์ ํ๋๋ง ๊ธฐ์ตํ๋ ๋จ์ ๋ณ์ ์ธ์๋,
๋ฐฐ์ด(array)์ด๋ ๊ตฌ์กฐ์ฒด(structure)๊ฐ์ ๋ณต์กํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค.
์ด๋ฐ ๋ณต์กํ ์๋ฃ๊ตฌ์กฐ ํ๋์๋ ๋ ์ง์คํฐ ๊ฐ์๋ณด๋ค ํจ์ฌ ๋ง์ ๋ฐ์ดํฐ ์์๊ฐ ์์ ์ ์์ต๋๋ค.
์ด๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ค์ ์ปดํจํฐ ๋ด์์ ์ด๋ป๊ฒ ํํ๋๊ณ ์ฌ์ฉ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐฐ์ด์ด๋ ๊ตฌ์กฐ์ฒด ๊ฐ์ ์๋ฃํ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํฉ๋๋ค.
์์์ ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด RISC-V์ ์ฐ์ ์ฐ์ฐ์ ๋ ์ง์คํฐ์์๋ง ์คํ๋๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ง์คํฐ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ช ๋ น์ด๊ฐ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฐ ๋ช ๋ น์ด๋ฅผ ๋ฐ์ดํฐ ์ ์ก(data transfer) ๋ช ๋ น์ด๋ผ ๋ถ๋ฆ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ค๋ฉด, ๋ช ๋ น์ด๊ฐ ์ ๊ทผํด์ผ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ ํ์ฌ์ผ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ์ฃผ์๊ฐ ์ธ๋ฑ์ค ์ญํ ์ ํ๋ 1์ฐจ์ ๋ฐฐ์ด์ด๋ฉฐ, ์ฃผ์๋ 0๋ถํฐ ์์ํฉ๋๋ค.
์ด๋ RISC-V ๋ ๋ฐ์ดํธ ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ฉฐ, double word ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ฏ๋ก,
์ฃผ์๋ double word์ ๋ฐ์ดํธ ์์ธ 8์ ๋ฐฐ์์ ๋๋ค.
์๋ฅผ ๋ค์ด ์ ๊ทธ๋ฆผ์์ ์ธ๋ฒ์งธ ๋ฐ์ดํฐ์ ์ฃผ์๋ 16์ด๊ณ , Memory[16]์ ๊ฐ์ 10 ์ ๋๋ค.
๐ง ์ ์ฌ ๋ช ๋ น : lw, ld
๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ง์คํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ ์ฅํ๋ ๋ช ๋ น์ ์ ์ฌ(load)๋ผ ํฉ๋๋ค.
์ ์ฌ ๋ช ๋ น์ ์ฐ์ฐ์ ์ด๋ฆ, ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์จ ๊ฐ์ ์ ์ฅํ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ฌ์ฉํ ์์์ ๋ ์ง์คํฐ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ ๊ทผํ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ ๋ช ๋ น์ด์ ์์ ๋ถ๋ถ๊ณผ ๋ ๋ฒ์งธ ๋ ์ง์คํฐ๊ฐ์ ํฉ์ผ๋ก ๊ตฌํด์ง๋๋ค.
RISC-V ์์ ํด๋น ๋ช ๋ น์ด์ ์ด๋ฆ์ lw(load word) ํน์ ld(load double word) ์ ๋๋ค.
๐ ์์
๋ค์ C ์ฝ๋์์,
A๋ ์์๊ฐ 100๊ฐ์ธ (๋๋ธ)์๋ ๋ฐฐ์ด์ด๊ณ , ๋ณ์ g, h๋ ๋ ์ง์คํฐ x20, x21์ ํ ๋น๋์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๋ ๋ฐฐ์ด A์ ์์ ์ฃผ์(base address)๊ฐ x22์ ๊ธฐ์ต๋์๋ค๊ณ ํ ๋, ๋ค์ C ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ณด์ธ์ :)
g = h + A[8];
๋ต
์ด ์นํ๋ฌธ์๋ ์ฐ์ฐ์ด ํ๋๋ฐ์ ์์ง๋ง, ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฏ๋ก ๋จผ์ A[8]์ ๋ ์ง์คํฐ๋ก ์ฎ๊ธด ํ ์ฐ์ฐ์ ์์ํด์ผ ํฉ๋๋ค.
์ด ๋ฐฐ์ด ์์์ ์ฃผ์๋ ๋ ์ง์คํฐ x22์ ์๋ ๋ฐฐ์ด์ ์์ ์ฃผ์์, 8๋ฒ์งธ ์์น์ ํด๋นํ๋ ์ฃผ์,
์ฆ double word ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก $8 \times 8 = 64$ ๋ฅผ ๋ํ ๊ฐ์ ๋๋ค.
ld x9 64(x22) // Temporary reg x9 gets A[8]
add x20 x21 x9 // g = h + A[8]
โญ๏ธ Offset(๋ณ์)๊ณผ Base Register(๋ฒ ์ด์ค ๋ ์ง์คํฐ)
๋ฐ์ดํฐ ์ ์ก ๋ช ๋ น์ด์ ์์ ๋ถ๋ถ(์์ ์์์์๋ 64)์ ๋ณ์(offset)๋ผ ํ๊ณ ,
์ฃผ์ ๊ณ์ฐ์ ์ํด ์ฌ๊ธฐ์ ๋ํด์ง๋ ๋ ์ง์คํฐ(์์ ์์์์๋ x22)๋ฅผ ๋ฒ ์ด์ค ๋ ์ง์คํฐ(base register)๋ผ๊ณ ํฉ๋๋ค
๐ง ์ ์ฅ ๋ช ๋ น : sw, sd
์ ์ฌ ๋ช ๋ น์ด์ ๋ฐ๋๋ก ๋ ์ง์คํฐ์ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌํ๋ ๋ช ๋ น์ ์ ์ฅ(store)์ด๋ผ ํฉ๋๋ค.
์ ์ฅ ๋ช ๋ น์ ์๊น์๋ ์ ์ฌ์ ๊ฐ์ต๋๋ค.
์ฆ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ฐ์ฐ์ ์ด๋ฆ
์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ ๋ ์ง์คํฐ
๋ฒ ์ด์ค ๋ ์ง์คํฐ
๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ผ ๋ณ์(offset)
์ ์ฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ผ๋ถ๋ ์์ ํํ๋ก ๋ช ๋ น์ด์ ํฌํจ๋์ด ์๊ณ , ์ผ๋ถ๋ ๋ ์ง์คํฐ์ ๊ธฐ์ต๋์ด ์์ต๋๋ค.
RISC-V ์์ ์ด ๋ช ๋ น์ด์ ์ค์ ์ด๋ฆ์ sw(store word)๋๋ sd(store double word)์ ๋๋ค.
๐ ์์
๋ค์ C ์ฝ๋์์,
A๋ ์์๊ฐ 100๊ฐ์ธ ์๋ ๋ฐฐ์ด์ด๊ณ , ๋ณ์ h๋ ๋ ์ง์คํฐ x21์ ํ ๋น๋์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๋ ๋ฐฐ์ด A์ ์์ ์ฃผ์(base address)๊ฐ x22์ ๊ธฐ์ต๋์๋ค๊ณ ํ ๋, ๋ค์ C ์ฝ๋๋ฅผ ์ปดํ์ผํด๋ณด์ธ์ :)
A[12] = h + A[8];
๋ต
ld x9, 64(x22) // Temporary reg x9 gets A[8]
add x9, x21, x9 // reg x9 gets h + A[8]
sd x9, 96(x22)
๐ง ์คํ๋ง (Spilling)
์ปดํจํฐ๊ฐ ๊ฐ๊ณ ์๋ ๋ ์ง์คํฐ๋ณด๋ค, ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ๋๋ ๋ณ์๊ฐ ๋ ๋ง์ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์์ต๋๋ค.
์ด๋ฅผ ์ํด ์ปดํ์ผ๋ฌ๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ณ์๋ฅผ ๊ฐ๋ฅํ ๋ง์ด ๋ ์ง์คํฐ์ ์ ์ฅํ๊ณ , ๋๋จธ์ง ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค๊ฐ ํ์ํ ๋ ๊บผ๋ด์ ๋ ์ง์คํฐ์ ๋ฃ์ต๋๋ค.
์ง์ฃผ ์ฌ์ฉํ์ง ์๋ ๋ณ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ๋ ๊ฒ์ ๋ ์ง์คํฐ๋ฅผ ์คํ๋ง(spilling) ํ๋ค๊ณ ํํํฉ๋๋ค.
๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ์ ๊ทผํ๊ธฐ ๋น ๋ฅด๋ฉฐ, ์ฌ์ฉํ๊ธฐ๋ ํธ๋ฆฌํฉ๋๋ค.
๐ง ์์ ํผ์ฐ์ฐ์(Immediate Operands)
ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ์์ ์์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์์๋ ํ๋ก๊ทธ๋จ์ด ์ ์ฌ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฏ๋ก,
์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ช ๋ น์ด๋ง์ผ๋ก ์์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์์๋ฅผ ์ฝ์ด์์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ ์ง์คํฐ x22์ ์์ 4๋ฅผ ๋ํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ld x9, AddConstant4(x3) // x9 = constant 4
add x22, x22, x9
์ฌ๊ธฐ์ x3 + AddConstant4 ๋ ์์ 4๊ฐ ์ ์ฅ๋์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ผ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
์์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ์์ ์์๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ค๋ฉด ์ฑ๋ฅ์ด ๋๋ ค์ง ๊ฒ์ด๋ฏ๋ก
์ ์ฌ ๋ช ๋ น์ ์ฌ์ฉํ์ง ์๊ณ ์์ ์ฐ์ฐ์ ์ ๊ณตํ๊ธฐ ์ํด
ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ์์์ธ ์ฐ์ ์ฐ์ฐ ๋ช ๋ น์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ์์๋ฅผ ์์น(immediate) ํผ์ฐ์ฐ์๋ผ ๋ถ๋ฆ ๋๋ค.
์์น ํผ์ฐ์ฐ์๋ฅผ ๊ฐ๋ ๋ง์ ๋ช ๋ น์ด๋ฅผ addi(add immediate)๋ผ ๋ถ๋ฆ ๋๋ค.
์์๋ก ๋ ์ง์คํฐ x22์ 4๋ฅผ ๋ํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
addi x22, x22, 4
'๐ฅ Computer Science > ์ปดํจํฐ ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ปดํจํฐ ๊ตฌ์กฐ] ๋ช ๋ น์ด(Instruction)[4] - ๋ ผ๋ฆฌ ์ฐ์ฐ ๋ช ๋ น์ด (0) | 2022.10.01 |
---|---|
[์ปดํจํฐ ๊ตฌ์กฐ] ๋ช ๋ น์ด(Instruction)[3] - ๋ช ๋ น์ด ํ์ (0) | 2022.10.01 |
[์ปดํจํฐ ๊ตฌ์กฐ] ๋ช ๋ น์ด(Instruction)[1] - RISC-V์ ๋ช ๋ น์ด ํํ (0) | 2022.10.01 |
[์ปดํจํฐ ๊ตฌ์กฐ] ์ปดํจํฐ์ ์ฑ๋ฅ (0) | 2022.09.18 |
[์ปดํจํฐ ๊ตฌ์กฐ] ์ปดํจํฐ ์ถ์ํ & ๊ธฐ์ (5) | 2022.09.18 |