๐Ÿ“š ์ปดํ“จํ„ฐ ๊ตฌ์กฐ ์ค‘๊ฐ„๊ณ ์‚ฌ ์ •๋ฆฌ

๐Ÿ“š ์ปดํ“จํ„ฐ ๊ตฌ์กฐ ์ค‘๊ฐ„๊ณ ์‚ฌ ์ •๋ฆฌ

์ค‘๊ฐ„๊ณ ์‚ฌ

1

์ปดํ“จํ„ฐ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋‘ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. ์ฐจ์ด์ ์€ ์šฉ๋„์™€ ํŠน์„ฑํ™”์—์„œ ์˜จ๋‹ค.

ํผํฌ๋จผ์Šค์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์š”์ธ : ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์–ธ์–ด/์ปดํŒŒ์ผ๋Ÿฌ/์•„ํ‚คํ…์ณ, ํ”„๋กœ์„ธ์„œ/๋ฉ”๋ชจ๋ฆฌ, OS๋ฅผ ๋น„๋กฏํ•œ IO

๊ณตํ•™์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐ€์น˜๋Š” ๊ณตํ†ต์ ์ธ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ. ์ค‘์š”ํ•œ ๊ฑด ์•„๋‹Œ๊ฑฐ ๊ฐ™๊ธด ํ•œ๋ฐ ์•„๋ฌดํŠผ

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ApplicationSoftware๋Š” Hardware์—๊ฒŒ ์ผ์„ ์‹œํ‚จ๋‹ค. ๊ทธ ์ผ์„ ์‹œํ‚ฌ ๋•Œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ค‘๊ฐ„์—์„œ ๋งค๊ฐœ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด SystemSoftware์ด๋‹ค. โ† shell

AssemblyLanguage ์™€ machine Instruction์€ 1๋Œ€1 ๋Œ€์‘๊ด€๊ณ„์ด๋‹ค. ํ‘œํ˜„์ด ๋‹ค๋ฅผ ๋ฟ.

์ปดํ“จํ„ฐ์˜ ๋ชจ๋“  ์ •๋ณด๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค.

ISA = Instruction Set Architecture (ABI : Application Binary Interface, Microarchitecture)

ํผํฌ๋จผ์Šค์˜ ๋น„๊ต๋Š” ๋‹จ์ˆœ ๋ง์…ˆ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๋‹ค. ์ƒํ˜ธ ์—ฐ๊ด€์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ. ๋ชจ๋‘ ๊ณฑํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐํ•ด์ค˜์•ผํ•จ.

์‘๋‹ต์‹œ๊ฐ„ : ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋ช‡์ดˆ ๊ฑธ๋ฆผ?

์ฒ˜๋ฆฌ์œจ : ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ๋ช‡๋ฒˆ ์ฒ˜๋ฆฌํ•จ?

1์ดˆ์— 10๋ฒˆ ์ฒ˜๋ฆฌํ–ˆ๋‹ค โ†’ ์‘๋‹ต์‹œ๊ฐ„ 0.1์ดˆ, ์ฒ˜๋ฆฌ์œจ 10ํšŒ ํ”„๋กœ์„ธ์„œ๋ฅผ ๋น ๋ฅธ๊ฒƒ์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค โ†’ ์ฒ˜๋ฆฌ์œจ์€ ์˜ค๋ฅด๊ณ  ์‘๋‹ต์‹œ๊ฐ„์€ ์ค„์–ด๋“ ๋‹ค ํ”„๋กœ์„ธ์„œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๋‹ค โ†’ ์ฒ˜๋ฆฌ์œจ์€ ์˜ค๋ฅธ๋‹ค(์ ์€์‹œ๊ฐ„์— ๋™์ผํ•œ์–‘ ์ฒ˜๋ฆฌ, ๋‚˜๋ˆ ์„œํ•˜๋‹ˆ๊นŒ), CPU์˜ ์‘๋‹ต์†๋„๋Š” ๊ทธ๋Œ€๋กœ๋‹ค. ๊ฐ™์€ CPU๋ฅผ ๊ทธ๋ƒฅ ๋Œ€์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๊ฑฐ๋‹ˆ๊นŒ.

์„ฑ๋Šฅ์€ ์‹œ๊ฐ„์˜ ์—ญ์ด๋‹ค. ์‹œ๊ฐ„์ด ์ ๊ฒŒ๊ฑธ๋ ค์•ผ ์„ฑ๋Šฅ์ด ์ข‹์€ ๊ฒƒ!

๊ฒฝ๊ณผ์‹œ๊ฐ„ : cputime์„ ํฌํ•จํ•ด ๋ชจ๋“  ๊ฑธ๋ฆฐ์‹œ๊ฐ„์„ ๋‹ค ๋”ํ•œ๊ฒƒ IO๋ž‘ OS์˜ ์˜ค๋ฒ„ํ—ค๋“œ, idle time๊นŒ์ง€ ์ „๋ถ€

CPU time : ์ˆœ์ˆ˜ํ•˜๊ฒŒ CPU์•ˆ์—์„œ๋งŒ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐ ํ•œ ๊ฒƒ. (User + System)CPU time

ํด๋ฝ : ๋…ผ๋ฆฌํšŒ๋กœ๋•Œ ๋ฐฐ์šด ๊ทธ ํด๋ฝ ๋งž๋‹ค. ํด๋ฝ์ด๋ž‘ ์ง„๋™์ˆ˜๋Š” ์—ญ์ˆ˜๋‹ค.

pico = 10^-12 โ†’ tera = 10^12 nano = 10^-9 โ†’ giga = 10^9

CPU Time = ๋ช‡๋ฒˆ์˜ ์‚ฌ์ดํด? (CC) * ์‚ฌ์ดํด๋‹น ์–ผ๋งˆ์˜์‹œ๊ฐ„?(CCT) โ† ๋„ˆ๋ฌด๋‚˜ ์ž๋ช…ํ•˜๋‹ค

๋‹จ ์—ฌ๊ธฐ์„œ CC๋ž‘ CCT๋Š” ๋…๋ฆฝ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹˜. CC๊ฐ€ ์ค„๋ฉด CCT๊ฐ€ ์˜ค๋ฅด๊ณ  CCT๊ฐ€ ์ค„๋ฉด CC๊ฐ€ ์˜ค๋ฅด๊ณ  ๊ทธ๋Ÿฐ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ ๋‘˜์˜ ์ ์ ˆํ•œ ํƒ€ํ˜‘์ ์„ ์ฐพ๋Š”๊ฒƒ์ด CPU์„ค๊ณ„์—์„œ ์ค‘์š”ํ•จ

CC(๋ช‡๋ฒˆ์˜ ์‹ธ์ดํด?) = sum(์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ช‡๊ฐœ? (IC) * ์ธ์ŠคํŠธ๋Ÿญ์…˜๋‹น ์‚ฌ์ดํด ๋ช‡๊ฐœ? (CPI))

์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์ดํด์ด ํ•„์š”ํ•˜๋‹ˆ๊นŒ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์— ๋Œ€ํ•ด ๊ทธ ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ช‡๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ทธ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์‚ฌ์ดํด ๋ช‡๊ฐœ๋ฅผ ์†Œ๋ชจํ•œ๋А์ง€ ๊ณ„์‚ฐํ•ด์„œ ๋‹ค ๋”ํ•ด๋ฒ„๋ฆฌ๋ฉด ๊ทธ๊ฒŒ ์ด ํ•„์š”ํ•œ ์‚ฌ์ดํด์˜ ๊ฐœ์ˆ˜ ์ฆ‰ CC๊ฐ€ ๋ ๊ฒƒ.

ํ‰๊ท  CPI = ์ „์ฒด ํ•„์š”ํ•œ ์‚ฌ์ดํด ์ˆ˜๋ฅผ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ„๋ฉด ๋˜๊ฒ ์ง€? ์œ„์—์„œ ๊ตฌํ•œ CC๋ฅผ IC๋กœ๋‚˜๋ˆˆ๋‹ค.

CPI 1, 2, 3 IC1 2, 1, 2 IC2 4, 1, 1 1โ†’ CC = 12 + 21 + 32 = 10, avgCPI = 10 / (2 + 1 + 2) = 2 2โ†’ CC = 14 + 21 + 31 = 9, avgCPI = 9 / (4 + 1 + 1) = 1.5

๊ฐ™์€ ISA๋ฅผ ๊ฐ€์ง„๊ฒƒ์„ ์ƒ๊ฐ A : CCT = 250ps, CPI = 2.0 B : CCT = 500ps, CPI = 1.2 A CPUT = IC * CPI * CCT = IC * 2.0 * 250ps = 500ICps B CPUT = IC * CPI * CCT = IC * 1.2 * 500ps = 600ICps ์‹œ๊ฐ„์€ ์„ฑ๋Šฅ์˜ ๋ฐ˜๋น„๋ก€ํ•œ๋‹ค. B์˜ ์„ฑ๋Šฅ์ด 1.2๋ฐฐ ์ข‹๋‹ค.

2GHz์˜ clock์„ ๊ฐ€์ง„ A๋Š” 10์ดˆ๊ฐ€ ๊ฑธ๋ ธ๊ณ  ์กฐ๊ธˆ ๋” ๋น ๋ฅธ clock์„ ๊ฐ€์ง„ B์—์„œ๋Š” ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด 6์ดˆ๊ฐ€ ๊ฑธ๋ ธ๋‹ค. B๊ฐ€ clock์ด ๋นจ๋ผ์ง„ ๋Œ€์‹  clock cycle์˜ ๊ฐœ์ˆ˜๊ฐ€ 1.2๋ฐฐ๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด B์˜ clock ์€ ์–ผ๋งˆ์ผ๊นŒ? CPUTA = CC * CCTA = CC / 2GHz = 10sec โ†’ CC = 20GHzsec CPUTB = 1.2CC * CCTB = 1.2CC / CCTB = 6sec โ†’ 20GHzsec * 1.2 / CCTB = 6sec =20GHz / CCTB = 5 โ†’20GHz = 5CCTB โ†’CCTB = 4GHz

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ : ์‹ฑ๊ธ€ ํ”„๋กœ์„ธ์„œ์˜ ์†๋„ ๊ฐœ์„ ์˜ ํ•œ๊ณ„๋ฅผ ๋ŒํŒŒํ•˜๊ธฐ์œ„ํ•ด ์—ฌ๋Ÿฌ ์‹ฑ๊ธ€ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ ์ด์šฉํ•œ๋‹ค. ๊ทธ์น˜๋งŒ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฝ”์–ด๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š”๊ฑด ์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ์ง€ ์•Š๋‹ค.

๊ธฐํ•˜ ํ‰๊ท  : ์‚ฐ์ˆ ํ‰๊ท ์ด ๋ง์…ˆ ๊ฐ’๋“ค์˜ ํ‰๊ท ์ด๋“ฏ, ๊ธฐํ•˜ ํ‰๊ท ์€ ๊ณฑ์…ˆ๊ฐ’๋“ค์˜ ํ‰๊ท ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ชจ๋“  ๊ณฑ์…ˆ๊ฐ’๋“ค์„ ๊ณฑํ•˜๊ณ  ๊ฐœ์ˆ˜๋งŒํผ์œผ๋กœ ์ œ๊ณฑ๊ทผ์„ ํ•ด์„œ ๊ตฌํ•œ๋‹ค. ์„ฑ๋Šฅ ๋น„๊ต์—์„œ ์‚ฌ์šฉ๋จ ์„ฑ๋Šฅ์€ ๋‹จ์ˆœํžˆ ๋”ํ•ด์„œ ์–ป์„์ˆ˜ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.

2

์ธ์ŠคํŠธ๋Ÿญ์…˜ : ๋กœ์šฐ๋ ˆ๋ฒจ. ํ๋ฆ„๊ตฌ๋ฌธ์ด ์—†์Œ. ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋Š” ๋‹ค๋ฅธ ISA๋ฅผ ๊ฐ–๋Š”๋‹ค.

CISC VS RISC : Complex vs Reduced์ธ๋ฐ ๋ง๊ทธ๋Œ€๋กœ complex๊ฐ€ ISA๊ฐ€ ๋ฐฉ๋Œ€ํ•˜๋‹ค. ๊ทผ๋ฐ ๊ทธ๋งŒํผ ๋‹ค ์‚ฌ์šฉํ•˜๋Š”๊ฑด ์•„๋‹˜. ๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด ํฌ๋‹ค๊ณ  ์ข‹์€๊ฑด ์•„๋‹˜. ์ตœ์ ํ™”์—๋„ ๋ฌธ์ œ๊ฐ€์žˆ๊ณ ..

RISC-V : 32๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ x0~31์„ ์‚ฌ์šฉํ•œ๋‹ค. (๊ฐ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ธธ์ด๋Š” 64๋น„ํŠธ์ž„) 64๋น„ํŠธ ์ฒด๊ณ„์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” 2^64๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, word์˜ ๊ธธ์ด๋Š” 32bit, ์ฆ‰ 2^3๋ฐ”์ดํŠธ์ด๋‹ค. ๋”ฐ๋ผ์„œ 2^61 word๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”๋ธ”์›Œ๋“œ๋Š” word * 2 ์ฆ‰ 2^4, 64๋น„ํŠธ์ด๋‹ค.

๋””์ž์ธ ์›์น™ : ๊ฐ„๋‹จํ•˜๊ณ  ๊ทœ์น™์ ์ด์–ด์•ผ ํ•œ๋‹ค. add dst, src, src ์ฒ˜๋Ÿผ dst๋ž‘ src์˜ ์œ„์น˜๊ฐ€ ์ผ์ •ํ•œ๋ฐฉ์‹์œผ๋กœ ๋””์ž์ธ๋˜์–ด์žˆ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ ์ปจ๋ฒค์…˜ :

x0 = constant 0 x1 = return address x2 = stack pointer x5~7 = temp x8~9 = saved x10~17 = args, returns x18~27 = saved x28~31 = temp

๋””์ž์ธ ์›์น™ : ์ž‘์„์ˆ˜๋ก ๋น ๋ฅด๋‹ค. โ†’ ๋ ˆ์ง€์Šคํ„ฐ ํด ํ•„์š”๋„ ์—†๋‹ค ๋ฌด์กฐ๊ฑด ์ž‘์€๊ฑฐ 32๊ฐœ ๋ ˆ์ง€์Šคํ„ฐ

๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์ปค์ง€๋ฉด ํ†ต๊ณผํ•  ๊ฒŒ์ดํŠธ๊ฐ€ ๋งŽ์•„์ง€๊ณ  ๊ฒฐ๊ตญ์—” ์‹œ๊ฐ„์ด ๋งŽ์ดํ•„์š”ํ•˜๊ฒŒ๋˜๋Š”๊ฑฐ

byte address : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ”์ดํŠธ ์–ด๋“œ๋ ˆ์Šค๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํ•œ ๋ธ”๋Ÿญ์ด ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ„. word๋Š” 4๋ฐ”์ดํŠธ์ด๋‹ค โ‡’ 32๋น„ํŠธ. ๋ฉ”๋ชจ๋ฆฌ ์ฒด๊ณ„์—์„œ 2^62๊ฐœ word๊ฐ€ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์Œ.

์—”๋””์•ˆ : big endian ํ•˜์œ„์ฃผ์†Œ โ†’ ์ƒ์œ„์ฃผ์†Œ๋กœ MSB๋ถ€ํ„ฐ LSB๊นŒ์ง€, small endian ํ•˜์œ„์ฃผ์†Œ โ†’ ์ƒ์œ„์ฃผ์†Œ๋กœ LSB๋ถ€ํ„ฐ MSB๊นŒ์ง€

์ค„๋งž์ถค : align, RISC-V์—์„œ๋Š” align์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต๊ฐ„์˜ ๋ฐฐ์ˆ˜์— ๋งž์ถฐ์„œ์ €์žฅํ•˜๋„๋ก ํ•˜๋Š”๊ฒƒ์ธ๋ฐ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋Œ€์‹  ์ง์ˆ˜ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํ•œ๋‹ค..

offset

    A[12] = h + A[8];             //adrs of A = x22, h = x21
    -----------------------------------------------------------------
    ld x9, 64(x22)                //x22์ฆ‰ A์˜ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ 64, ์ฆ‰ 8์นธ ๋–จ์–ด์ง„๊ณณ์˜ ์š”์†Œ๋ฅผ x9์— ์ €์žฅ
    add x9, x21, x9               //x9์—๋Š” A[8]๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค. ์ด๊ฑฐ๋ž‘ h๋ฅผ ๋”ํ•ด์„œ x9์— ์ €์žฅ
    sd x9, 96(x22)                //x9์—๋Š” ๊ณ„์‚ฐ๊ฐ’์ด ์ €์žฅ๋˜์–ด์žˆ๋‹ค. A๋กœ๋ถ€ํ„ฐ 96, 12์นธ ๋–จ์–ด์ง„๊ณณ์— x9์„ ์ €์žฅ

๋ ˆ์ง€์Šคํ„ฐ vs ๋ฉ”๋ชจ๋ฆฌ : ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋น ๋ฅด๋‹ค. CPU์— ๋ฐ•ํ˜€์žˆ์œผ๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ ๋” ๋น ๋ฅด๋‹ค. ๋ฐ˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‚ฌ์šฉํ•˜๋ ค๋ฉด ldํ•ด์•ผํ•˜๊ณ  sdํ•ด์•ผํ•˜๋‹ˆ instruction์ด ๋” ๋งŽ์ด ๋“ค์–ด๊ฐ€๊ณ  ๊ฒฐ๊ตญ์—” ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค. C์–ธ์–ด๊ฐ™์€ ํ•˜์ด๋ ˆ๋ฒจ ๋žญ๊ธฐ์ง€์—์„œ register๋ฅผ ๊ตณ์ด ๋ถ™์—ฌ์ฃผ์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์“ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์—ฐ์†์ ์ธ ์ฃผ์†Œ์ฒด๊ณ„๋ฅผ ๊ฐ€์ง„๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค๊ฑฐ๋‚˜ ๊ทธ๋Ÿฐ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•จ.

immediate : ์ƒ์ˆ˜๊ฐ’์„ ๋‹ค๋ฃจ๋Š”๊ฒฝ์šฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ. ๊ทธ๋Ÿฌ๋‚˜ instruction์˜ ๊ธธ์ด๊ฐ€ word๋‹จ์œ„์ด๊ธฐ๋•Œ๋ฌธ์—, word๋‹จ์œ„ ๋‚ด์—์„œ ์•Œ๋งž์€ ์ƒ์ˆ˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธธ์ด์— ์ œํ•œ์ด ์ƒ๊ธด๋‹ค.

๋ถ€ํ˜ธ ํ™•์žฅ : 2์ง„์ˆ˜ ์ฒด๊ณ„์—์„œ ์Œ์ˆ˜๋Š” MSB๊ฐ€ 1์ด๋ƒ 0์ด๋ƒ๋กœ ๊ฒฐ์ •์ด ๋‚œ๋‹ค. shift instruction์„ ์ด์šฉํ•ด ์šฐ๋ฆฌ๋Š” 2์ง„์ˆ˜๋ฅผ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์ผ์„ ํ•  ๋•Œ MSB๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ค„์ฃผ๋А๋ƒ์— ๋”ฐ๋ผ์„œ ๋ถ€ํ˜ธ ์ž์ฒด๊ฐ€ ๋ฐ”๊ปด๋ฒ„๋ฆฐ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋ก  logical shift๋ฅผ ํ•ด์„œ ๋นˆ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ์ฑ„์šฐ๊ณ  ์šฐ์ธก shift์‹œ์—๋งŒ arithmetic shift๋ฅผ ๊ณ ๋ คํ•ด์ฃผ๋ฉด ๋œ๋‹ค. MSB๋ฅผ ์‚ด๋ฆฌ๋ฉด์„œ ์›€์ง์ด๋Š”๊ฑฐ. ๋‹ค์‹œ๋งํ•ด์„œ MSB 0 ์ด์—ˆ์œผ๋ฉด 0์œผ๋กœ, 1์ด์—ˆ์œผ๋ฉด 1๋กœ ์ฑ„์šฐ๋Š”๊ฒƒ. ๊ฐ์ข… instruction์—์„œ ์ž๋ฆฟ์ˆ˜์— ์•ˆ๋งž๋Š” immediate์ด๋“ค์–ด์˜ค๋ฉด extensionํ•ด์„œ ์ž๋ฆฌ๋ฅผ ๋งž์ถฐ์ค˜์•ผ๊ฒ ์ง€. ๊ทธ๋Ÿด๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

instruction format : ์—ฐ์‚ฐ์ž์— ๋”ฐ๋ผ์„œ instruction์˜ ํฌ๋งท์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋‘ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์ง€๋งŒ, ์ผ์ข…์˜ ํฌ๋งท์„ ์ •ํ•ด์„œ ๊ทธ binary๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•  ๊ฒƒ์ธ๊ฐ€ ์—ฌ์ง€๋ฅผ ์ฃผ๋Š”๊ฒƒ. ๋ฐฐ์น˜๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค. RISC-V๋Š” ๊ฐ„๋‹จํ•จ์„ ์ตœ๊ณ ๋กœ ์—ฌ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— instruction์˜ ๊ธธ์ด๋Š” ๋ฌด์กฐ๊ฑด 32๋น„ํŠธ๋กœ ๊ณ ์ •๋˜์–ด์žˆ๋‹ค. ํฌ๋งท์€ ๊ฐ€๋Šฅํ•œ ๊ฐ„๋‹จํ•˜๊ณ  ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•˜์ž

stored program : instruction๋„ ๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฆ„์—†์ด 2์ง„์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ํ‘œํ˜„๋จ

Logical instruction :

ยซย slli : shift left logical immediate

srli : shift right logical immediate ~ xor : xor ์ž๊ธฐ์ž์‹ ์„ ํ†ตํ•ด์„œ ๊ตฌํ•ด์ง„๋‹ค.

a = 1, b = 2์ผ ๋•Œ a&b = 1 (๋‘˜ ๋‹ค true) a&&b = 0 (๊ฐ™์ง€ ์•Š๋‹ค) logical ๊ณผ arithmetic์˜ ์ฐจ์ด

and or xor์€ rํฌ๋งท andi ori xori๋Š” iํฌ๋งท

ํ”„๋กœ์‹œ์ ธ : ํ•จ์ˆ˜๋ž‘ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค ์ฝ”๋“œ์˜ ์žฌํ™œ์šฉ์„ฑ์„ ๋Š˜๋ ค ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ  flow๋ฅผ ๊ผฌ์•„์ค€๋‹ค. ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๋Š˜์–ด๋‚˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š”๊ฑธ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ชจ๋กœ ์žฅ์ ์ด ๋งŽ๋‹ค. ๊ทผ๋ฐ ํ”„๋กœ์‹œ์ €๋Š” ์ œ์–ด์˜ ํ๋ฆ„์ด ์˜ฎ๊ฒจ๊ฐ€๋Š”๊ฑฐ๋‹ˆ๊นŒ ํ๋ฆ„์ธ PC์™€ ๋ฐ์ดํ„ฐ๊ฐ€๋“ค์–ด์žˆ๋Š” x10~17๋ ˆ์ง€์Šคํ„ฐ ๋“ฑ ์‹ ๊ฒฝ์จ์ค˜์•ผํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.

  1. ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ x10~x17์— ๋ฐฐ์น˜ํ•ด์ค€๋‹ค.
  2. ์ปจํŠธ๋กค์„ ํ”„๋กœ์‹œ์ ธ๋กœ ์˜ฎ๊ธด๋‹ค. ์ด๋ง์€ ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ์— ํ”„๋กœ์‹œ์ €์˜ ์ฃผ์†Œ๊ฐ€ ์˜ค๋„๋ก ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ. jal x1 procedure ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ํ”„๋กœ์‹œ์ €์—์„œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฑ์—…์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ stack ์— push ํ•ด์ค˜์•ผํ•œ๋‹ค. x8~x9, x18~27๊นŒ์ง€ save๋˜์–ด์•ผํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋“ค, ํ˜น์€ ํ˜„์‹œ์ ์—์„œ ๋Œ์•„๊ฐ€์•ผํ•˜๋Š” ๋ฆฌํ„ด์ฃผ์†Œ ๋“ฑ.
  4. ํ”„๋กœ์‹œ์ €๊ฐ€ ์˜ํ–ฅ์„ ๋ผ์น  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ •๋ฆฌํ•ด์„œ ์˜ํ–ฅ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜์˜€๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์€ x10~17๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ, ์ด์ œ ํ”„๋กœ์‹œ์ €์—์„œ ์˜๋„ํ•œ ํ–‰์œ„๊ฐ€ ์ด๋ค„์ง€๋ฉด ๋œ๋‹ค.
  5. ํ–‰์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ caller๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” x10~17์— ์ €์žฅํ•ด์ค€๋‹ค
  6. ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

jalr : ๋ณดํ†ต sd์— x0๋ฅผ ๋„ฃ์–ด์„œ ๋ฌด์กฐ๊ฑด ์ด๋™์œผ๋กœ ์“ฐ์ง€๋งŒ ์‚ฌ์‹ค์€ ๋‹ค๋ฅธ๊ฑธ ๋„ฃ์–ด์„œ switch๋ฌธ์œผ๋กœ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๋๋‹จ ํ”„๋กœ์‹œ์ ธ

    long long leaf_example(long long g, h, i, j){
    	long long f;
    	f = (g + h) - (i + j);
    	return f;
    }
    laef_example :
    	addi sp, sp, -8  <- sp ๊ณต๊ฐ„ํ™•๋ณด
    	sd x20, 0(sp)    <- ํ™•๋ณด๋œ sp์— x20์„ ์ €์žฅ. x18~27์€ saved๋˜์–ด์•ผํ•œ๋‹ค
    	add x5, x10, x11 <- g + h๋ฅผ x5์— ์ €์žฅ.
    	add x6, x12, x13 <- i + j๋ฅผ x6์— ์ €์žฅ.
    	sub x20, x5, x6  <- ๋‘ ๊ฒฐ๊ณผ๋ฅผ ๋บ€๊ฑธ x20์— ์ €์žฅ. ๊ทธ๋ƒฅ ํ•œ๋ฒˆ ํ•ด๋ณด๋Š”๋“ฏ?
    	addi x10, x20, 0 <- caller๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ x10~17์— return value์ €์žฅ
    	ld x20, 0(sp)    <- stack์— ๋ฐฑ์—…ํ–ˆ๋˜ x20๊ฐ’ ๋ณต์›
    	addi sp, sp, 8   <- garbage collect. ์Šคํƒ ๊ณต๊ฐ„ release
    	jalr x0, 0(x1)   <- ๋‹ค์Œ instruction์œผ๋กœ ๋ฌด์กฐ๊ฑด ๋ถ„๊ธฐ
    leaf_example : 
    	addi sp, sp, -8
    	sd x1, 0(sp)
    	add x5, x10, x11
    	add x6, x12, x13
    	sub x10, x5, x6
    	ld x1, 0(sp)
    	addi sp, sp, 8
    	jalr x0, 0(x1)

์Šคํƒ๋ฉ”๋ชจ๋ฆฌ : ์Šคํƒ์€ ๋†’์€๊ณณ์—์„œ ๋‚ฎ์€๊ณณ์œผ๋กœ ์ฐฌ๋‹ค. ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋„ฃ๊ณ ์‹ถ์œผ๋ฉด sp๋ฅผ ๋นผ๋ผ

๋๋‹จ์ด ์•„๋‹Œ ํ”„๋กœ์‹œ์ ธ

    long long fact(long long n){
    	if(n < 1) return 1;
    	else return n * fact(n - 1);
    }
    fact : 
    	addi sp, sp, -16  <- ํ”„๋กœ์‹œ์ ธ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด ๋ฆฌํ„ด์ฃผ์†Œ๋‚˜ ์ธ์ž๊ฐ’์€ ์ €์žฅ๋˜์–ด์•ผ
    	sd x1, 8(sp)      <- ์Šคํƒ 16์ž๋ฆฌ ๋Š˜๋ ค์„œ 8์ž๋ฆฌ 8์ž๋ฆฌ ๋ฆฌํ„ด์ฃผ์†Œ๋ž‘ ์ธ์ž๊ฐ€ ๋จน๋Š”๋‹ค.
    	sd x10, 0(sp)
    	addi x5, x10, -1  <- x10 - 1 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด else๋กœ ์•„๋‹ˆ๋ฉด ๊ทธ๋Œ€๋กœ
    	bge x5, x0, else
    	addi x10, x0, 1   <- 1์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
    	addi sp, sp, 16   <- ๋๋‚ฌ์œผ๋‹ˆ ์žก์•„๋จน์—ˆ๋˜ ์Šคํƒ์€ ๊ฑ ๋‚ ๋ ค๋„๋จ.
    	jalr x0, 0(x1)    <- ๋๋‚˜๋ฉด ๊ฐ€์•ผ๋˜๋Š”๊ณณ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    else :
    	addi x10, x10, -1 <- ๊ธฐ์กด x10์€ sp์— ์ €์žฅ๋˜์–ด์žˆ์œผ๋‹ˆ ใ„ฑใ…Š
    	jal x1, fact      <- x10 - 1๋กœ fact ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ ์‹คํ–‰์‹œ sp์— ๊ฐ’์„ ์ €์žฅํ•˜๋‹ˆ ใ„ฑใ…Š
    	addi x6, x10, 0   <- ๊ธฐ์กด x10์„ ๋ณต๊ท€์‹œ์ผœ์•ผํ•˜๋‹ˆ x6์œผ๋กœ ์˜ฎ๊ฒจ์ค€๋‹ค.
    	ld x10, 0(sp)
    	ld x1, 8(sp)
    	addi sp, sp, 16   <- ์ด๋ฒˆ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ๋๋‚จ. sp์— ํ•„์š”์—†๋Š” 16๋น„ํŠธ ์ œ๊ฑฐ
    	mul x10, x10, x6  <- ๊ฒฐ๊ณผ๋ฅผ caller๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” x10~17์— ๋ฐฐ์น˜ํ•˜๊ณ 
    	jalr x0, 0(x1)    <- ๋๋‚˜๋ฉด ๋Œ์•„๊ฐ€์•ผํ•˜๋Š” ๊ณณ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. 
    fact : 
    4	  addi sp, sp, -16
    8	  sd x1, 8(sp)
    12	sd x10, 0(sp)
    16	addi x5, x10, -1
    20	bge x5, x0, Else     //offset 12
    24	addi sp, sp, 16
    28	jalr x0, 0(x1)
    Else :
    32	addi x10, x10, -1
    36	jal x1, fact         //offset -32
    40	addi x6, x10, 0
    44	ld x10, 0(sp)
    48	ld x1, 8(sp)
    52	addi sp, sp, 16
    56	mul x10, x10, x6
    60	jalr x0, 0(x1)

์Šคํƒ์— ์Œ“์ด๋Š”๊ฑด ์ธ์ž, ๋ฆฌํ„ด์ฃผ์†Œ, ์ €์žฅ๋œ ๋ ˆ์ง€์Šคํ„ฐ์ฃผ์†Œ, ๋ฐฐ์—ด๊ตฌ์กฐ ๋“ฑ๋“ฑ ์กด๋‚˜๋‹ค์–‘ํ•จ

์ „์—ญ๋ณ€์ˆ˜๋Š” static data์˜์—ญ์—, ์ง€์—ญ๋ณ€์ˆ˜๋Š” stack์˜์—ญ์—, ๋™์ ํ• ๋‹น๋œ๊ฒƒ์€ dynamic data์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. ์ง€์—ญ๋ณ€์ˆ˜๋ž‘ ๋™์ ํ• ๋‹น์€ ๋Ÿฐํƒ€์ž„์ค‘์— ๋™์ ์œผ๋กœ ํ• ๋‹น์ด๋  ์ˆ˜ ์žˆ์–ด์„œ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ์žˆ์ง€ ์•Š๋‹ค. stack์€ ์œ„์—์„œ dynamic์€ ์•„๋ž˜์—์„œ ์˜ฌ๋ผ์˜ค๋ฉฐ ์„œ๋กœ ํ•„์š”ํ•œ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ ๋จน๋Š”๋‹ค.

wide immediate : ๋Œ€๋ถ€๋ถ„์˜ immediate ์ƒ์ˆ˜๋Š” ํด ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ๊ฐ€๋” ์กด๋‚˜ํฐ๊ฒŒ ํ•„์š”ํ•˜๋‹ค. I format์—์„œ ์ง€์›ํ•˜๋Š” ์ตœ๋Œ€ immediate ํฌ๊ธฐ๋Š” 12๋น„ํŠธ๋‹ˆ๊นŒ ์ปค๋ด์•ผ -2^11~2^11 -1 ์ž„. ๊ฐ€๋”์”ฉ 32๋น„ํŠธ ์ƒ์ˆ˜๋ฅผ ์จ์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿด๋•Œ๋ฅผ ์œ„ํ•ด์„œ ์ƒ์œ„ 20๋น„ํŠธ (load upper immeidate)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•ด์ค€๋‹ค.

0x003d0500 โ‡’ ์ƒ์œ„ 20 = 0x003d0(000) ํ•˜์œ„ 12 = 0x500 lui x19, 0x003d0 โ† ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•Œ์•„์„œ ํ•˜์œ„ 12๋น„ํŠธ๋Š” 0์œผ๋กœ, ์ƒ์œ„ ๋น„ํŠธ๋Š” MSB๋งž์ถฐ์„œ ํ™•์žฅํ•ด์„œ ๋”ํ•ด์คŒ addi x19, 0x500 โ† lui์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ ํ•˜์œ„ 12๋น„ํŠธ๋„ ์ฒ˜๋ฆฌ

๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€์ง€์น˜๊ธฐ๋Š” 12๋น„ํŠธ ์•ˆ์ชฝ์—์„œ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๊นŒ์šด ๊ฐ€์ง€์น˜๊ธฐ์ด๋‹ค.

immediate * 2๋งŒํผ์˜ ์ฃผ์†Œ๋ฅผ ๋”ํ•ด์„œ ๋ณด๋‚ธ๋‹ค. โ† RISC-V๊ฐ€ ์ง์ˆ˜ ์ฃผ์†Œ์ฒด๊ณ„๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ?

์กฐ๊ฑด๋ถ€ ๊ฐ€์ง€์น˜๊ธฐ : ์˜ต์ฝ”๋“œ์™€ ๋ ˆ์ง€์Šคํ„ฐ ๋‘๊ฐœ, 12๋น„ํŠธ์˜ ์ด๋ฏธ๋””์—‡์„ ์‚ฌ์šฉ. 0๋ฒˆ์งธ ๋น„ํŠธ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ. ์ง์ˆ˜ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ. ๋”ฐ๋ผ์„œ ํ‘œํ˜„์— ๋™์›๋˜๋Š” ๋น„ํŠธ๋Š” 13์ž๋ฆฌ โ†’ -2^12-1 ~ 2^12 -2 ๋กœ -4096 ~ 4094๋ฐ”์ดํŠธ์˜ ๋ฒ”์œ„(๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ดํŠธ ์–ด๋“œ๋ ˆ์‹ฑ)๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ ์ด๊ฑธ +-2^10 word (4๋ฐ”์ดํŠธ๊ฐ€ 32๋น„ํŠธ 32๋น„ํŠธ๊ฐ€ word)(+-4Kib)๋กœ ๋Œ€๋žต์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌด์กฐ๊ฑด ๊ฐ€์ง€์น˜๊ธฐ : ์˜ต์ฝ”๋“œ์™€ ๋ ˆ์ง€์Šคํ„ฐ ํ•˜๋‚˜, 20๋น„ํŠธ์˜ ์ด๋ฏธ๋””์—‡ ์‚ฌ์šฉ. ๋”ฐ๋ผ์„œ +-2^18word ๋ฒ”์œ„ (+- 1Mib)

20๋น„ํŠธ์˜ ์ด๋ฏธ๋””์—‡ ์‚ฌ์šฉ โ†’ 0๋ฒˆ์งธ ๋น„ํŠธ๋Š” ๋ฌด๋ฃŒ โ†’ 21๊ฐœ์˜ ๊ฐ€์šฉ๋น„ํŠธ โ‡’ -2^21-1 ~ 2^21-2

๋‘˜ ๋‹ค ์ง์ˆ˜์ฃผ์†Œ์ฒด๊ณ„๋ผ 1๋น„ํŠธ๊ฐ€ ๋‚จ๋Š”๋‹ค ๋”ฐ๋ผ์„œ ๊ฐ๊ฐ 13๋น„ํŠธ์™€ 21๋น„ํŠธ์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ–์ง€๋งŒ ์Œ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•จ โ†’ 12, 20 ์›Œ๋“œ ๊ธธ์ด๋Š” ๋ฐ”์ดํŠธ์ž„

U-format์„ ์ด์šฉํ•˜๋ฉด ๋” ๋ฉ€๋ฆฌ jumpํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งž์œผ๋ฉด L1์œผ๋กœ ๋ฐ”๋กœ ๋ณด๋‚ด(beq)๋Š” ๋Œ€์‹  ๋งž์œผ๋ฉด L2๋กœ ๋ณด๋‚ด๊ณ  ํ‹€๋ฆฌ๋ฉด U-format์œผ๋กœ L1์„ ๋ณด๋‚ด๋Š”์‹์œผ๋กœ ๋…ผ๋ฆฌ์™€ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ์–ด์ฃผ๋ฉด L1์€ uformat์„ ํƒ€๊ณ  ๋” ๋ฉ€๋ฆฌ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. (20๋น„ํŠธ ์ด๋ฏธ๋””์—‡)

jal์€ iํฌ๋งท์ด๋‹ค โ†’ register๋กœ๋ถ€ํ„ฐ immediate 12๋น„ํŠธ ๋ฒ”์œ„๊นŒ์ง€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

jalr์ด ujํฌ๋งท โ†’ ํ˜„์œ„์น˜๋กœ๋ถ€ํ„ฐ ๋กœ๋ถ€ํ„ฐ immediate 20๋น„ํŠธ ๋ฒ”์œ„๊นŒ์ง€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. SB์ฒ˜๋Ÿผ ์ง์ˆ˜์ฒด๊ณ„ ์ด์šฉ

lui๋Š” uํฌ๋งท โ†’ upper immediate์„ ์ด์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

jal x1 label : jal์˜ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ label(immediate)๋งŒํผ ๋–จ์–ด์ง„ ๊ณณ์œผ๋กœ jumpํ•จ๊ณผ ๋™์‹œ์— x1์—๋Š” ํ˜„์žฌ์˜ ๋‹ค์Œ ์‹คํ–‰ ์˜ˆ์ • ์ฃผ์†Œ ์ฆ‰ PC +4๊ฐ€ ์ €์žฅ๋œ๋‹ค ๊ทธ๋ž˜์„œ x1๋Œ€์‹  x0์„ ์ฃผ๋ฉด ๋ฆฌํ„ด์ฃผ์†Œ๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  jump๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ๊ณ  ์›ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ค˜์„œ ๋‹ค๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋ฆฌํ„ด ์ฃผ์†Œ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ๋„ ์žˆ๋‹ค.

jalr๋„ ๋™์ผํ•˜๋‹ค. ์• ์ดˆ์— jump๋ผ๋Š”๊ฑด flow๊ฐ€ ์˜ฎ๊ฒจ๊ฐ€๋Š”๊ฑฐ์ž„. jal์€ jal์˜ ์œ„์น˜์—์„œ 20์ž๋ฆฌ immediate๋งŒํผ jumpํ–ˆ์ง€๋งŒ, jalr์—์„œ๋Š” register+ 12์ž๋ฆฌ immediate๋งŒํผ jump๋ฅผ ํ•œ๋‹ค. ๋‘˜๋‹ค rd์ž๋ฆฌ์—” ๋Œ์•„์˜ฌ ์ฃผ์†Œ๋ฅผ ์ง‘์–ด๋„ฃ๋Š”๋ฐ jalr๊ฐ™์€๊ฒฝ์šฐ๋Š” ๋ณดํ†ต ๋Œ์•„์˜ฌ๋–„, ์ฆ‰ ๊ธฐ์ค€์  PC๋ฅผ ํ†ตํ•ด ๋Œ์•„์˜ค๋Š”๊ฒฝ์šฐ, ๋‹ค์‹œ ์ด์ชฝ์œผ๋กœ ์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— constant์ธ x0์„ ๋„ฃ์–ด์„œ ์ฃผ์†Œ ์ €์žฅ์—†์ด ๋Œ์•„์˜ค๋Š”๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ์— ๋‹ค๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋„ฃ๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ทธ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ๋Œ์•„์˜ฌ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐˆ๊ฑฐ๊ณ , ๊ทธ๊ฑด switch๋ฌธ ๊ฐ™์€๋ฐ์„œ ์“ฐ์ธ๋‹ค.

MIPS = Million Instructions Per Second = IC / (CPUT * 10^6)

ISA = Instruction Set Architecture ๋ช…๋ น์–ด ์ง‘ํ•ฉ์œผ๋กœ Intel CPU์™€ AMD CPU์˜ ๊ฒฝ์šฐ ISA๋Š” ๊ฐ™์ง€๋งŒ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ณ๊ฐ€ ๋‹ค๋ฅด๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ISA๋ฅผ ๊ฐ–๋Š”๋‹ค๋Š”๊ฒƒ์€ ๊ทธ ๋ฐ‘๋‹จ์ธ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ณ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋๋Š”์ง€๋Š” ๋ชฐ๋ผ๋„, ๊ฐ™์€ ๋ช…๋ น์–ด ์…‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ binary compatibleํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

addressing mode

  • immediate addressing : operand ํ•˜๋‚˜๋Š” reg, ํ•˜๋‚˜๋Š” imm โ‡’ immediate์œผ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด
  • register addressing : operand ๋‘˜ ๋‹ค reg โ‡’ ๋ ˆ์ง€์Šคํ„ฐ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด
  • base addressing : ํ•˜๋‚˜๋Š” reg, ํ•˜๋‚˜๋Š” ๋ฉ”๋ชจ๋ฆฌ (reg + imm) โ‡’ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด immediate์ด offset
  • pc relative addressing : ํ•˜๋‚˜๋Š” reg, ํ•˜๋‚˜๋Š” PC (reg + imm) โ‡’ PC๋กœ๋ถ€ํ„ฐ ๋ถ„๊ธฐํ•จ immediate์ด offset

RISC-V๋Š” byte ordering์ด๋‹ค โ†’ ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋Ÿญ์ด ํ•œ ๋ฐ”์ดํŠธ๋ฅผ ๊ฐ–๋Š”๋‹ค align์„ ์ง€์›ํ•œ๋‹ค โ†’ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ word ์‚ฌ์ด์ฆˆ์— ๋งž์ถฐ์„œ ํ•œ๋‹ค (RISC-V๋Š” align์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  ์ง์ˆ˜์ฃผ์†Œ๋ฅผ ์ด์šฉ. ์ฐธ๊ณ ๋กœ RISC-V์˜ word์‚ฌ์ด์ฆˆ๋Š” 4๋ฐ”์ดํŠธ 32๋น„ํŠธ)

3

REVIEW ๊ฐ•ํ•œ instruction์€ ๊ทธ ํ•˜๋“œ์›จ์–ด ๊ตฌํ˜„์ด ๋” ๋ณต์žกํ•ด์ง€๊ณ  ๊ทธ๋กœ์ธํ•ด ์†๋„๋ฅผ ๋А๋ฆฌ๊ฒŒ๋งŒ๋“ ๋‹ค Assembly์ฝ”๋”ฉ์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋” ์ž˜ํ•˜๊ณ  ์˜ค๋ฅ˜๋„ ๋” ์ž˜์žก๋Š”๋‹ค. binary compatibility๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด ISA๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ํฌํ•จํ•˜๊ณ ์žˆ์–ด์•ผํ•œ๋‹ค. word๋Š” ๋ฉ”๋ชจ๋ฆฌ 4๋ธ”๋Ÿญ์”ฉ ์ฐจ์ด๋‚œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ•œ๋ธ”๋Ÿญ์€ 1๋ฐ”์ดํŠธ(8๋น„ํŠธ), word๋Š” 4๋ฐ”์ดํŠธ(32๋น„ํŠธ)

arithmetic ์—ฐ์‚ฐ์—์„œ ์šฐ๋ฆฌ๋Š” signed์™€ unsigned๋ฅผ ๊ตฌ๋ถ„ํ•ด HW๋ฅผ ์„ค๊ณ„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋„ ๋ฌผ๋ก  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ž์„œ ๋งํ–ˆ๋“ฏ ํ•˜๋“œ์›จ์–ด์˜ ๋ณต์žกํ•จ์€ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘˜ ๋‹ค ๊ณ„์‚ฐ์ด ๋˜๊ฒŒ ํ•˜๊ณ  ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ, ์˜ˆ๋ฅผ๋“ค์–ด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์€ SW๋‹จ์—์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. HW์™€ SW์‚ฌ์ด์˜ ๊ท ํ˜•์„ ๋งž์ถฐ์„œ ํ•ด๊ฒฐํ•˜๋Š”๊ฒƒ

๋ง์…ˆ ์—ฐ์‚ฐ์—์„œ์˜ overflow๋Š” ์–‘+์–‘ = ์Œ ์Œ+์Œ = ์–‘ ์ด ๋‘๊ฐ€์ง€๋ฅผ ๋งํ•œ๋‹ค. unsigned์—์„œ carry๋น„ํŠธ๋กœ์ธํ•ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”๊ฒƒ์€ overflow๋ผ๊ณ  ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์–‘์ˆ˜๋ฅผ ๋นผ๋Š” ๊ฒƒ๊ณผ ์Œ์ˆ˜๋ฅผ ๋”ํ•˜๋Š”๊ฒƒ์€ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋‚ธ๋‹ค. ์‚ฌ์‹ค์ƒ ๋บ„์…ˆ๋„ ๋ง์…ˆ๊ณผ ๊ฐ™์€๊ฒƒ. ๋”ฐ๋ผ์„œ ๋บ„์…ˆ์—์„œ์˜ overflow๋Š” ๋ง์…ˆ์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•ด์ฃผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐ๋œ๋‹ค.

๊ณฑ์…ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๊ณฑ์…ˆ์€ multiplier์˜ ๊ฐ์ž๋ฆฌ์™€ multiplicand๋ฅผ ๊ณฑํ•œ ๋ถ€๋ถ„ ๊ณฑ๋“ค์„ ๋ชจ๋‘ ๋”ํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ HW์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” multiplier๋Š” ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ์˜ค๋ฅธ์ชฝ์œผ๋กœ, multiplicand๋Š” ์™ผ์ชฝ์œผ๋กœ shiftํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

multiplier์˜ LSB์™€ multiplicand๋ฅผ ๊ณฑํ•ด์„œ ๋ถ€๋ถ„๊ณฑ์„ ์–ป์–ด๋‚ด๋Š”๋ฐ, ๊ฐ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋ ์ˆ˜๋ก ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์€ 2๋ฐฐ๊ฐ€๋˜์–ด์•ผํ•œ๋‹ค (์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด 2๋ฐฐ๊ฐ€๋œ๋‹ค โ‡’ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์™ผ์ชฝ์œผ๋กœ shiftํ•ด์ค˜์•ผํ•œ๋‹ค) โ‡’ multiplicand๋ฅผ left shift ๋งค๋ฒˆ ๊ณฑํ•ด์ง€๋Š” multiplier์˜ LSB๋ฅผ ์œ„ํ•ด์„œ multiplier๋ฅผ right shiftํ•œ๋‹ค. โ‡’ multiplier ๋ฅผ right shift

๊ณฑ์…ˆ์˜ ๊ฒฐ๊ณผ์˜ ๊ธธ์ด๋Š” operand length์˜ ํ•ฉ๊ณผ ๊ฐ™๋‹ค. 64๋น„ํŠธ ์ˆ˜ ๋‘๊ฐœ๋ฅผ ๊ณฑํ–ˆ์„ ๋•Œ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 128์ด๋œ๋‹ค. ๊ทผ๋ฐ ์™„๋ฒฝํžˆ๊ทธ๋Ÿฐ๊ฑด ์•„๋‹ˆ๊ณ  carry ๋ฐœ์ƒ ์•ˆํ•˜๋ฉด 127์—์„œ ๋ฉˆ์ถœ์ˆ˜๋„์žˆ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ 128๋น„ํŠธ์ธ๋ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ๋งž์ถฐ์ค˜์•ผํ•œ๋‹ค.

multiply flow chart multiplier์˜ LSB๊ฐ€ 0์ด๋ฉด ๊ทธ๋ƒฅ ์ง€๋‚˜๊ฐ€๊ณ  1์ด๋ฉด multiplicand๋ฅผ ๊ฒฐ๊ณผ๊ฐ’์ด๋ž‘ ๋”ํ•ด์ค€๋‹ค. multiplicand๋Š” ์™ผ์ชฝ์œผ๋กœ 1๋น„ํŠธ, multiplier๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ์”ฉ shift ํ•ด์ค€๋‹ค. ๋ฐ˜๋ณต์„ 64 ๋ฒˆ ํ–ˆ๋‹ค๋ฉด ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋œ๊ฒƒ. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ˜๋ณตํ•œ๋‹ค.

์ดˆ๊ธฐ ๋ง์…ˆ ํšŒ๋กœ : multiplicand, multiplier, product ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, multiplicand๋Š” ์™ผ์ชฝ์œผ๋กœ 64๋ฒˆ shift ํ•ด์•ผํ•˜๊ณ  product๋Š” 64๋น„ํŠธ ์ˆ˜ ๋‘๊ฐœ์˜ ๊ณฑ์…ˆ๊ฐ’์„ ์ €์žฅํ•ด์•ผํ•˜๋ฏ€๋กœ 128๋น„ํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ ธ์•ผํ•œ๋‹ค. multiplier๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ shiftํ•˜๊ธฐ๋งŒํ•˜๋‹ˆ๊นŒ 128์ผํ•„์š”๋Š” ์—†๋‹ค. ๋ง์…ˆ๊ธฐ๋Š” ์ตœ๋Œ€ 128๋น„ํŠธ๊นŒ์ง€ ๋”ํ•ด์•ผํ•˜๋ฏ€๋กœ 128๋น„ํŠธ์—ฌ์•ผํ•จ.

ex) 0010(multiplicand) * 0011(multiplier) ๋ถ€๋ถ„๊ณฑ : 0011, 0000 0010 = 1 * 0000 0010 = 0000 0010 ์‹œํ”„ํŠธ : 0001, 0000 0100 โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”- ๋ถ€๋ถ„๊ณฑ : 0001, 0000 0100 = 1 * 0000 0100 = 0000 0010 + 0000 0100 = 0000 0110 ์‹œํ”„ํŠธ : 0000, 0000 1000 โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”- ๋ถ€๋ถ„๊ณฑ : 0000, 0000 1000 = 0 * 0000 1000 = 0000 0110 + 0000 0000 = 0000 0110 ์‹œํ”„ํŠธ : 0000, 0001 0000 โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”- ๋ถ€๋ถ„๊ณฑ : 0000, 0001 0000 = 0 * 0001 0000 = 0000 0110 + 0000 0000 = 0000 0110 ์‹œํ”„ํŠธ : 0000, 0010 0000 โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€”- 4๋ฒˆ ๋ฐ˜๋ณต : multiplier ์˜ bit ์ˆ˜ ๋งŒํผ ์—ฐ์‚ฐ ํ›„ ์ข…๋ฃŒ

๊ฐœ์„ ๋œ ๋ฒ„์ „์˜ ๋ง์…ˆ ํšŒ๋กœ : multiplicand๋Š” ์–ด์งœํ”ผ ์›€์ง์—ฌ๋ด์•ผ ๋’ค์— 0๋งŒ ์ฃผ๋ ์ฃผ๋  ๋‹ฌ๊ณ ๋‚˜์˜ค๋Š”๋ฐ, ํฐ ์˜๋ฏธ ์—†์œผ๋‹ˆ๊นŒ ๊ทธ๋Ÿฌ์ง€๋ง๊ณ  ๊ฑ ํ•ฉํ• ๋•Œ product๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ shift์‹œ์ผœ์„œ ๋”ํ•˜๋Š” ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ์ž. multiplicand๋Š” ๊ณ ์ •์‹œํ‚ค๊ณ  ์—ฐ์‚ฐํ• ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ณผ์ธ product๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด์ค€๋‹ค. multiplier๋Š” ์–ด์งœํ”ผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€๋ ค์•ผํ•˜๋‹ˆ๊นŒ product์˜ ์ตœ์ข… ํฌ๊ธฐ์ธ 128๋น„ํŠธ์— multiplier ์ดˆ๊ธฐํฌ๊ธฐ 64๋น„ํŠธ, ๊ฒฐ๊ณผ๋„ ์ดˆ๊ธฐ์—” 64๋น„ํŠธ๋งŒ ๋‚˜์˜ค๋‹ˆ๊นŒ ํƒ€๋‹นํ•˜๋‹ค ํ•œ์ž๋ฆฌ์”ฉ ๋ฐ€์–ด์ฃผ๋ฉด์„œ ํ•˜์ž

๋” ๋น ๋ฅธ ๋ฒ„์ „ : ALU๋ฅผ ์กด๋‚˜๋งŽ์ด์จ์„œ ํ•œ๋ฒˆ์— ๊ณ„์‚ฐ์„๋•Œ๋ฆฐ๋‹ค๋ฉด? ๋’ค์—์„œ ์•ž์—์„œ ๋ชจ๋‘ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋’ท๋น„ํŠธ ์•ž๋น„ํŠธ ๋นผ๋‚ด๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ค‘๊ฐ„ ๋น„ํŠธ๊นŒ์ง€ ๋นผ๋‚ด๋ฉด ๊ทธ๊ฒŒ ๊ฒฐ๊ตญ์—” ๊ณฑ์…ˆ์—ฐ์‚ฐ ์ˆ˜ํ–‰ํ•œ๊ฑฐ๋ž‘ ๊ฐ™๋‹ค. 32 + 16 + 8 + โ€ฆ + 1๊ฐœ ํ•ด์„œ ์ด 63๊ฐœ์˜ ALU๋ฅผ ๋™์›ํ•ด์„œ 128๋น„ํŠธ๋ฅผ ๊ณ„์‚ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๊ณ , 6์˜ ๊นŠ์ด๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์€ ์ ๊ฒŒ๋จน๋Š”๋‹ค. ์—ฌ๊ธฐ์— ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด์„œ ๋” ๋นจ๋ผ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ณฑ์…ˆ instruction : 64๋น„ํŠธ์˜ ๊ณฑ์…ˆ์€ 128๋น„ํŠธ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค. 4๊ฐ€์ง€์˜ instruction์ด ์žˆ๋Š”๋ฐ, ๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ๊ณ„์‚ฐํ•˜๋Š”๊ฑด 64๋น„ํŠธ๋งŒํ•ด๋„ ์กด๋‚˜๊ฒŒ ํฐ ์ˆซ์ž๊ธฐ๋•Œ๋ฌธ์— ํ•˜์œ„ 64๋น„ํŠธ๋งŒ ์ƒ๊ฐ์„ ํ•ด์ค˜๋„ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ISA๋“ค๊ณผ ๋‹ฌ๋ฆฌ RICS-V์—์„œ๋Š” ๊ณฑ์…ˆ๋„ Rํฌ๋งท์œผ๋กœ ๋‚˜ํƒ€๋‚ผ์ˆ˜์žˆ๋‹ค ๊ต‰์žฅํžˆ ์˜ˆ์™ธ์ ์ธ๊ฒƒ.

mul : ๊ณฑ์…ˆ์—ฐ์‚ฐ ๊ฒฐ๊ณผ 128๋น„ํŠธ์˜ ํ•˜์œ„ 64๋น„ํŠธ๋งŒ์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค mulh : ๊ณฑ์…ˆ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ์ƒ์œ„ 64๋น„ํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๋ฐ, ์ด๋Š” ๋‘˜ ๋‹ค signed ์—ฐ์‚ฐํ–ˆ์„ ๊ฒฝ์šฐ, mulhu : mulh๋ž‘ ๊ฐ™์€๋ฐ ๋‘˜ ๋‹ค unsigned์˜€์„๊ฒฝ์šฐ mulhsu : mulh๋ž‘ ๊ฐ™์€๋ฐ ํ•˜๋‚˜๋Š” signed, ํ•˜๋‚˜๋Š” unsigned์˜€์„ ๊ฒฝ์šฐ๋‹ค

mul๋งŒ์œผ๋กœ ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ณ ์‹ถ์€๋ฐ ํ˜น์‹œ๋ผ๋„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค๋ฉด? โ† ๋งŒ์•ฝ mul๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ”๋‹ค๋ฉด mulh๊ฐ’์ด ์žˆ์„๊ฒƒ์ด๋‹ค. ๋„˜๊ธฐ์ง€ ์•Š์•˜๋‹ค๋ฉด mul์˜ MSB๊ฐ’์œผ๋กœ sign extension๋œ ๊ฐ’์ด mulh์— ๋“ค์–ด๊ฐ€๊ฒ ์ง€๋งŒ, ํ˜น์‹œ๋ผ๋„ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š”๊ฑด mul๋กœ ํ‘œํ˜„์„ ๋‹ค ํ•˜์ง€ ๋ชปํ•˜๋Š”(overflow)๊ฐ’์ด ๊ณ„์‚ฐ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ž„. SW์ ์œผ๋กœ ์ด๋ฅผ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค. ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†



DIVISOR ์•ˆ๋‚˜์˜ต๋‹ˆ๋‹ค!~~

C โ†’ RISC-V Instruction Session

PDF ์˜ˆ์ œ 1

    long long leaf_example(long long g, h, i, j){
    	long long f;
    	f = (g + h) - (i + j);
    	result f;
    }
    leaf_example :
    	add x5, x10, x11
    	add x6, x12, x13
    	sub x10, x5, x6
    	jalr x0, 0(x1)

return value๊ฐ€ ์ €์žฅ๋  x10์— ๊ทธ๋ƒฅ ์ง๋นต์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋  ๊ฒƒ.

    leaf_example : 
    	addi sp, sp, -8
    	sd x20, 0(sp)
    	add x5, x10, x11
    	add x6, x12, x13
    	addi x10, x20, 0
    	ld x20, 0(sp)
    	addi sp, sp, 8
    	jalr x0, 0(x1)

๊ตณ์ด x20์ฒ˜๋Ÿผ save๋˜์–ด์•ผํ•˜๋Š” register๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋Œ€๋žต ์ด๋Ÿฐ ๊ผด์ด ๋œ๋‹ค.

PDF ์˜ˆ์ œ 2

    long long fact (long long n){
    	if(n < 1) return 1;
    	else return n * fact(n - 1);
    }
    fact : 
    	addi sp, sp, -16
    	sd x1, 8(sp)
    	sd x10, 0(sp)
    	addi x5, x10, -1
    	bge x5, x0, L1
    	addi x10, x0, 1
    	addi sp, sp, 16
    	jalr x0, 0(x1)
    L1 : 
    	addi x10, x10, -1     //recursive call์„ ์œ„ํ•œ ์ƒˆ argument n-1
    	jal x1, fact          //recursive call
    	addi x6, x10, 0       //x10์— ์›๋ž˜ ๊ฐ’ ๋Œ๋ ค๋†“๊ธฐ ์ „์— ๋ฐ˜ํ™˜๊ฐ’ ๋ฐฑ์—…
    	ld x10 0(sp)          //์žฌ๊ท€๊ฐ€ ๋๋‚˜์•ผ ๋ฐ˜ํ™˜๋˜๋‹ˆ๊นŒ ์ด์‹œ์ ์—์„  ์ด๋ฒˆ์งธ ๋ฐฑ์—…๋œ ๊ฐ’ ๋ณต๊ตฌ๋˜๋Š”๊ฑฐ 
    	ld x1 8(sp)           
    	addi sp, sp, 16       
    	mul x10, x10, x6      
    	jalr x0, 0(x1)

๊ณผ์ œ 1

    for ( i = 1; i <= 100; i++){
    	sum += i;
    }
    Loop : 
    	addi x7, x6, -100     //x7์— i - 100์„ ์ €์žฅํ•ด๋‘”๋‹ค.
    	blt x0, x7, Exit      //(i <= 100) => (i-100 <= 0) => !(i-100 > 0) => ! (0 < i-100)
    	add x5, x5, x6      
      addi x6, x6, 1
    	beq x0, x0, Loop   
    Exit : 

๋‚ด ์ •๋‹ต

    Loop : 
    	addi x7, x0, 100      //x7์— 100์„ ์ €์žฅํ•ด๋‘”๋‹ค. 
    	blt x7, x6, Exit      //(i <= 100) => !(i > 100) => !(100 < i)
    	add x5, x5, x6
      addi x6, x6, 1
    	beq x0, x0, Loop
    Exit :

์žฌ์šฉ

๊ณผ์ œ 2

    int fib(int n){
    	if(n == 0) return 0;
    	if(n == 1) return 1;
    	return fib(n - 1) * fib(n - 2);
    }

๋‚ด ์ •๋‹ต

    fib : 
    	addi sp, sp, -32     //ํ˜„์žฌ ๋ฐ˜๋ณต์ด n๋ฒˆ์งธ๋ผ๋ฉด n-1๋ฒˆ์งธ์˜ ์ •๋ณด ๋ฐฑ์—…
    	sd x1, 24(sp)
    	sd x10, 16(sp)
    	sd x18, 8(sp)
    	sd x19, 0(sp)
    	bne x10, x0, L1
    	addi sp, sp, 32
    	jalr x0, 0(x1)
    L1 :                 
    	addi x5, x10, -1
    	bne x5, x0, L2
    	addi sp, sp, 32
    	jalr x0, 0(x1)
    L2 : 
    	addi x10, x10, -1    //x10์—์„œ 1 ๋บ€ ๊ฐ’์„ ์ธ์ž๋กœ ์ค˜ ์žฌ๊ท€
    	jal x1, fib              
    	addi x18, x10, 0     //๊ฒฐ๊ณผ๋ฅผ saved ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
    	ld x10, 16(sp)       //x10์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฏ€๋กœ ์Šคํƒ์—์„œ load
    	addi x10, x10, -2    //x10์—์„œ 2 ๋บ€ ๊ฐ’์„ ์ธ์ž๋กœ ์ค˜ ์žฌ๊ท€
    	jal x1, fib            
    	addi x19, x10, 0     //๊ฒฐ๊ณผ๋ฅผ saved ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
    	add x10, x18, x19    //๋ฆฌํ„ด์„ ์œ„ํ•ด x10์— saved์— ์ €์žฅํ•œ ๋‘ ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•ด์„œ caller์—๊ฒŒ ์ „๋‹ฌ
    	ld x19, 0(sp)        //recursion์ด ๋๋‚˜๋ฉด ์ด์ „์— ์ €์žฅํ•œ ๊ฐ’๋“ค์„ ๋˜๋Œ๋ฆฐ๋‹ค.
    	ld x18, 8(sp)
    	ld x1, 24(sp)        
    	addi sp, sp, 32      //stackํ•ด์ œ
    	jalr x0, 0(x1)       //jump
Share: Twitter Facebook
Seunghun Yang's Picture

About Seunghun Yang

Seunghun is undergraduate student at Computer Science Engineering in CNU(Chungnam National University).

Daejeon, South Korea

Comments