๐ Register ๋ ์ง์คํฐ
์ฌ์น์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ์ข #6
๐ซ Register ๋ ์ง์คํฐ
CPU ์์ ๋ค์ด์๋ ๊ณ ์ ๋ฉ๋ชจ๋ฆฌ์ด๋ค.
CPU์ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ๋น ๋ฅด๋ค.
CPU์ ์ํ๋ฅผ ์ ์ฅํ๊ฑฐ๋, ๋ฐ์ดํฐ ์ด๋, ์ฐ์ ์ฐ์ฐ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง ์ฝ๋๋ ๋ ์ง์คํฐ๋ฅผ ์ ์ดํ๋ ์ฝ๋๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก ์ฐ์ด๊ธฐ๋ ํ์ง๋ง, ์ ์ฅ๋ ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๋ผ ํ๋์จ์ด ๋ฑ์ ์ํ์ ์ํฅ์ ๋ฏธ์น๊ธฐ๋ ํ๋ค.
๋ ์ง์คํฐ๋ CPU ๋ด ๋ฒํธ, ์ฃผ๊ธฐ์ต์ฅ์น ์ฃผ์์ ์ผ๋ถ ์์ญ, ์ ์ถ๋ ฅ ํฌํธ ๋ฒํธ ๋ฑ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
์ปดํจํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ํฌ๊ธฐ์ ์ข
๋ฅ๊ฐ ๋ค์ํ๋ค.
@ ์ธํ
๊ณ x86 cpu๋ ๋ฉ๋ชจ๋ฆฌ โ ๋ฉ๋ชจ๋ฆฌ ์ ์ก๋ ๊ฐ๋ฅํ์ง๋ง, ๊ทธ ์ธ ์๋น์ CPU๋ ๋ฐ์ดํฐ ์ด๋์์๋ ๋ ์ง์คํฐ๋ฅผ ๊ฑฐ์ณ์ผ๋ง ํ๋ค.
๐ซ ๋ ์ง์คํฐ์ ์ ํ
CPU ๋ ์ง์คํฐ โ CPU ๋ด์์ ์์นํ์ฌ CPU ์ ์ด
โ ์ฐ์ฐ (๋์ฐ๊ธฐ) = A Register
โ ๊ฐ์ ์์ ์ ์ฅ ์ฉ๋ = S Register ๋ก ์ฌ์ฉ โ A, PC, MBR, MPN | S, T
ํน์ ๊ธฐ๋ฅ ๋ ์ง์คํฐ - SFR Special Function Register
ํน์ ๋ชฉ์ ๋ ์ง์คํฐ - SPR Special Purpose Register
ํน์ ๋ ์ง์คํฐ - SR Special Register
โ ์ปดํจํฐ ์ ๋ฐ์ ๊ฑธ์น ์ํ๋ฅผ ์ค์ ํ๊ฑฐ๋ ํ์ฌ ์ํ ํ์
์
์ถ๋ ฅ ๋ ์ง์คํฐ
โ ์
์ถ๋ ฅ ์ฅ์น์ ์ฐ๊ฒฐ๋์ด ์
๋ ฅ์ด๋ ์ถ๋ ฅํ ๋ ๋ฐ์ดํฐ ์ ๋ฌ ํต๋ก ์ญํ
๐ซ ๋ ์ง์คํฐ์ ์ ํ์ X, E, R
x86 CPU ๊ธฐ์ค, ํน์ํ ๋ช ๊ฐ์ ๋ ์ง์คํฐ๋ค์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ 32๋นํธ ๋ ์ง์คํฐ์ด๋ค.
16๋นํธ, 32๋นํธ๋ ์ ํ์ E (32๋นํธ 386๋ถํฐ), 64๋นํธ๋ ์ ํ์ R์ ๋ถ์ธ๋ค.
16-bit, X โ heX.
32-bit, E โ Extended.
64-bit, R โ Register.
๐ซ ๋ฒ์ฉ ๋ ์ง์คํฐ - ๋ฐ์ดํฐ ๋ ์ง์คํฐ
๐ซง ๋ฐ์ดํฐ ๋ ์ง์คํฐ
๋ณดํต ์ฐ์ ์ฐ์ฐ์ ๋ง์ด ์ฐ์ด๊ณ , ๋ช ๊ฐ์ง ํน์ํ ๊ธฐ๋ฅ์ด ์๋ ๋ ์ง์คํฐ๋ค.
4๊ฐ์ ๋ ์ง์คํฐ ๋ชจ๋ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
8๋นํธ์ฉ ์ชผ๊ฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฐ, ์ด๋ ๋จ์ํ ๋๋ ์ฐ๊ธฐ ์ํจ๋ ์๊ณ , ๊ณผ๊ฑฐ 8086๊ณผ ํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๊ฒ๋ ์๋ค.
์๋ฅผ ๋ค์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
AL(Low) + AH(High) = 16-bit AX.
+16-bit = 32-bit EAX.
+32-bit = 64-bit RAX.
๐ซง AX, DX
๊ณฑ์
๋๋์
์ ํ ๋๋ ๋ฐ๋์ ์ด ๋ ์ง์คํฐ๋ค์ ์ฌ์ฉํด์ผํ๋ค.
์ฐ์ฐ์ ๊ฒฐ๊ณผ ํน์ ์์ค์ ๊ฐ์ด 64๋นํธ์ผ ๋ ํ์ 32๋นํธ = EAX, ์์ 32๋นํธ = EDX์ ์ ์ฅ๋๋ค.
์ธํ
๊ณ ์ปดํ์ผ๋ฌ์์๋ ํจ์์ ๋ฆฌํด๊ฐ์ด EAX ๋ ์ง์คํฐ๋ฅผ ํตํด ์ ๋ฌ๋๋ค.
๐ซง BX
๊ธฐ๋ณธ์ ์ธ ๋ฒ์ฉ ๋ ์ง์คํฐ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
๐ซง CX
Counter, loop/movs ๋ฑ์ ๋ช ๋ น๊ณผ ํจ๊ป ์ฐ์ผ ๊ฒฝ์ฐ ์นด์ดํฐ๋ก ์ฐ์ธ๋ค.
๐ซ ๋ฒ์ฉ ๋ ์ง์คํฐ - ํฌ์ธํฐ ๋ ์ง์คํฐ
๐ซง Stack Pointer, SP/ESP/RSP
ํ์ฌ ์คํ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ง์คํฐ ์์๋ก ์กฐ์ํ ์๋ ์์ง๋ง ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์ ์งค๋๋ ๊ฑด๋๋ฆฌ์ง ์๋ ๊ฒ์ด ์ข๋ค.
push, pop ๋ช
๋ น๊ณผ ์ฐ๋๋๋ค. pushํ๋ฉด 4๋ฐ์ดํธ ๊ฐ์, popํ๋ฉด 4๋ฐ์ดํธ ์ฆ๊ฐํ๋ค.
์คํ์ ๋ฏธ๋ฆฌ ์ผ์ ์ฌ์ด์ฆ๋ฅผ ํ๋ณดํด๋๊ณ ๊ทธ ์ํ์์ ์ฌ์ฉํ ๋๋ง๋ค 0์ ํฅํด์ ๊ฐ์ํด๊ฐ๋ ํํ์ด๊ธฐ ๋๋ฌธ์, pushํ์ ๋ ์คํํฌ์ธํฐ๊ฐ ๊ฐ์ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ push๋ ํ ๋น, pop์ ํด์ ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๐ซง Base Pointer, BP/EBP/RBP
์ผ๋ฐ์ ์ผ๋ก ํจ์ ์ง์ ์์ ์คํ ํ๋ ์๊ณผ ํจ์ ์์์ ์์ ๋กญ๊ฒ ์ฌ์ฉํ๊ฒ ๋ (push, pop) ์คํ ๊ณต๊ฐ๊ณผ์ ๊ฒฝ๊ณ๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๋ฌผ๋ก EBP๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก ESP๋ก ์ต์ธ์ค ํด๋ ๋์ง๋ง (์ค์ ๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํ ๋ ๊ทธ๋ ๊ฒ ํ๋ค) ์งค ๋ ์์ฒญ๋๊ฒ ํท๊ฐ๋ฆฐ๋ค.
๊ฐ๋ น ํจ์์ ์ง์
ํ์ ๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ EBP+8์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ์ง๋ง ESP ๊ธฐ์ค์ผ๋ก๋ ์ด๋๊ฐ ๋ ์ง ๋ชจ๋ฅธ๋ค.
push, popํ ๋๋ง๋ค ESP์ ๊ฐ์ด ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์ค์ ์ผ๋ก ์ผ์ ์๊ฐ ์๋ ๊ฒ์ด๋ค.
๐ซ ๋ฒ์ฉ ๋ ์ง์คํฐ - ์ธ๋ฑ์ค ๋ ์ง์คํฐ
๐ซง ์ธ๋ฑ์ค ๋ ์ง์คํฐ
์ธ๋ฑ์ค ๋ ์ง์คํฐ๋ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ค์ฒ๋ผ ์ชผ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
32๋นํธ ๊ทธ ์์ฒด๋ก๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ดํฐ ์ด๋์ ๊ด๋ จ๋ ํน์ํ ๋ช
๋ น๋ค์ ์ฌ์ฉํ ๋ source์ destination ์ด๋๋ ์ค๋ฅผ ์ง์ ํ๋ ๋ฑ ์ฃผ์์ง์ ์ ๊ด๋ จ๋ ํน์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ๋ ์ง์คํฐ๋ผ๊ณ ํ๋ค.
๐ซง Source Index SI(16-bit)/ESI/RSI
์ source์ธ๊ณ ํ๋ ํน์ํ ๋ฐ์ดํฐ ์ด๋ ๋ช
๋ น movs ๋ฑ์ ์ฌ์ฉํ ๋ esi์ source ๋ฉ๋ชจ๋ฆฌ์ ์ด๋๋ ์ค๋ฅผ ๋ฃ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ง์นญํ ๋ ์ด ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ค.
๐ซง Destination DI(16-bit)/EDI/RDI
ESI์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๊ณ movs๋ฑ์ ์ฌ์ฉํ ๋ destination ์ด๋๋ ์ค๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
๐ซ ํน์ ๊ธฐ๋ฅ ๋ ์ง์คํฐ - IP ๋ ์ง์คํฐ
๐ซง Instruction Pointer IP ๋ ์ง์คํฐ
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ ์ง์คํฐ,
๋ค์์ผ๋ก ์คํ๋ ํ๋ก๊ทธ๋จ ๋ช
๋ นํ์ ์์น๋ฅผ ์ ์ฅํ๋ค.
IP + 1, ์ฐ์์ ์ผ๋ก ์คํํด ๋ช
๋ นํ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ค.
IP = n, ๋ค๋ฅธ ์์น๋ก ํ๋ฒ์ ์ด๋ํด if, while ๊ณผ ๊ฐ์ ๋ช
๋ น์ ์ํํ๋ค.
๐ซ ๊ทธ ์ธ
๋๋ฒ๊ทธ ๋ ์ง์คํฐ, ํ๋๊ทธ ๋์ง์คํฐ ๊ฐ์ ํน์ํ ๋ ์ง์คํฐ๋ค์ ์ ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ธ ์ผ์ด ์๋ค.
๐ซง MMX๋ ์ง์คํฐ
ํํฐ์ ํด๋์ MMX๋ฒ์ ๋ถํฐ ์ถ๊ฐ๋์๋ค.
์ ํํ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๋ ๋ ์ง์คํฐ๊ฐ ์๋๊ณ FPU ์คํ์ ๋ ์ง์คํฐ์ฒ๋ผ ์ฌ์ฉํ๋ค.
MM0 ~ MM7, 8๊ฐ๊ฐ ์๋ค.
๐ซง SSE๋ ์ง์คํฐ
ํํฐ์3๋ถํฐ ์ถ๊ฐ๋์๋ค.
32๋นํธ float ๋ฐ์ดํ 4์ํ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ 128๋นํธ ๋ ์ง์คํฐ์ด๋ค.
XMM0 ~ XMM7 8๊ฐ๊ฐ ์๋ค.