๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿฆพ ๋ณด์•ˆ ๐Ÿฆพ/๋ฆฌ๋ฒ„์‹ฑ

x86-64 CPU ๋ ˆ์ง€์Šคํ„ฐ

๋ฐ˜์‘ํ˜•

๋ ˆ์ง€์Šคํ„ฐ

์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜(CPU)์˜ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๊ณ ์† ๋ฉ”๋ชจ๋ฆฌ๋กœ, ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„. ์ฒ˜๋ฆฌ ํ›„ ํ•ด๋‹น ๊ฒฐ๊ณผ ๊ฐ’ ์—ญ์‹œ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ ํ›„ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.

 

๋ ˆ์ง€์Šคํ„ฐ ๋‹จ์œ„

OS 32/64bit : CPU๊ฐ€ ํ•œ๊บผ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Ÿ‰์„ ๋งํ•จ

 

 

01. ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ

๋ ˆ์ง€์Šคํ„ฐ ์—ญํ• 
AX (Acumulator register) ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๋กœ, ๊ฐ์ข… ์—ฐ์‚ฐ์— ์“ฐ์ž„. ์ฃผ๋กœ ๋ฆฌํ„ด ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ.
DX (Data register) ๊ฐ์ข… ์—ฐ์‚ฐ์— ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๋กœ, ์ž…์ถœ๋ ฅ ๋ช…๋ น์–ด์™€ ๊ณฑ์…ˆ๊ณผ ๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์—์„œ ์ถ”๊ฐ€์ ์—” ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ
CX (Counter register) ๋ฐ˜๋ณต๋ฌธ์˜ ์นด์šดํ„ฐ๋กœ ์‚ฌ์šฉ, ๋ฏธ๋ฆฌ ๊ฐ’์„ ์ •ํ•ด๋†“๊ณ  0์ด ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰, ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉ
BX (Base Register) ๋ชฉ์ ์ด ์—†๋Š” ๋ ˆ์ง€์Šคํ„ฐ, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณ„์‚ฐ ์‹œ ๋ฒ ์ด์Šค๋กœ ์‚ฌ์šฉ
SI (Source Index)
DI (Destination Index)
๋ฌธ์ž์—ด์ด๋‚˜ ๊ฐ์ข… ๋ฐ˜๋ณต๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐ ์‚ฌ์šฉ.
๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ์ธ๋ฑ์Šค ๊ณ„์ƒ์— ์‚ฌ์šฉ.
ESI๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“œ๋ ค์™€์„œ EDI์—๊ฒŒ ๋„˜๊ฒจ์คŒ.
give me(EDI) chocolate(ESI)
SP (Stack Pointer) ์Šคํƒ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์„ ์•Œ๋ฆฌ๋Š” ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉ.
BP (Base Poiner) ์Šคํƒ ์‹œ์ž‘ ๋ถ€๋ถ„์„ ์•Œ๋ฆฌ๋Š” ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉ.
IP (Instruction Pointer) CPU๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ด

 

02. ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ

→ ํ”„๋กœ๊ทธ๋žจ์— ์ •์˜๋œ ํŠน์ • ์˜์—ญ์œผ๋กœ, ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ์„ ํฌํ•จ

1) CS(Code Segment) : ์‹คํ–‰ ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

2) DS(Data Segment) : ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

3) SS(Stack Segment) : ์Šคํƒ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

4) ES(Extra Segment) : ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด

5) FS, GS : ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ด, ํŠน์ • ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ

 

03. ํ”Œ๋ž˜๊ทธ ์ธ๋ฑ์Šค

→ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ƒํƒœ ์ •๋ณด ์ €์žฅ

1) CF(Carry Flag) : ๋ถ€ํ˜ธ ์—†๋Š” ์ˆซ์ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ ์ฐธ์„ ๋‚˜ํƒ€๋ƒ„

2) ZF(Zero Flag) : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ธ ๊ฒฝ์šฐ 0์„ ๋‚˜ํƒ€๋ƒ„, cmp ๋น„๊ต๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ 1์„ ๋‚˜ํƒ€๋ƒ„.

3) SF(Sign Flag) : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜์ธ ๊ฒฝ์šฐ ์ฐธ์„ ๋‚˜ํƒ€๋ƒ„

4) OF(Overflow Flag) : ๋ถ€ํ˜ธ ์žˆ๋Š” ์ˆซ์ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ ์ฐธ์„ ๋‚˜ํƒ€๋ƒ„

5) PF(Parity Flag) : ๊ฒฐ๊ณผ ํ•˜์œ„๋น„ํŠธ์— ์žˆ๋Š” 1์˜ ๋น„ํŠธ ์ˆ˜๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ ์ฐธ์„ ๋‚˜ํƒ€๋ƒ„

6) AF(Auxialiary Flag) : ํ•˜์œ„์˜ ๋น„ํŠธ์—์„œ ์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฐธ์„ ๋‚˜ํƒ€๋ƒ„

7) DF(Direction Flag) : ๋ฌธ์ž์—ด ์กฐ์ž‘์—์„œ ์ฐธ์ผ ๊ฒฝ์šฐ ์ฃผ์†Œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์ด ๊ฐ์†Œ, ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ ์ฆ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋ƒ„.

8) BCD(Binary Code Decimal) : ์—ฐ์‚ฐ์— ์‚ฌ์šฉ

๋ฐ˜์‘ํ˜•