ํฌ์ŠคํŠธ

๐ŸŒ‘ 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๊ฐœ๊ฐ€ ์žˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.