๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ ๋ณด์•ˆ·์ทจ์•ฝ์ /๐Ÿ”ธ์‹œ์Šคํ…œ·์šด์˜์ฒด์ œ

[dreamhack] Background: Computer Architecture

by Jenny:! 2023. 7. 10.

1. ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์™€ ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ

1.1 ์ปดํ“จํ„ฐ ๊ตฌ์กฐ

์ปดํ“จํ„ฐ ๊ตฌ์กฐ์˜ ์„ธ๋ถ€ ๋ถ„์•ผ

 

  • ๊ธฐ๋Šฅ ๊ตฌ์กฐ์˜ ์„ค๊ณ„
    • ํฐ ๋…ธ์ด๋งŒ ๊ตฌ์กฐ
    • ํ•˜๋ฒ„๋“œ ๊ตฌ์กฐ
    • ์ˆ˜์ •๋œ ํ•˜๋ฒ„๋“œ ๊ตฌ์กฐ
  • ๋ช…๋ น์–ด ์ง‘ํ•ฉ๊ตฌ์กฐ
    • x86, x86-64
    • ARM
    • MIPS
    • AVR
  • ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜
    • ์บ์‹œ ์„ค๊ณ„
    • ํŒŒ์ดํ”„๋ผ์ด๋‹
    • ์Šˆํผ ์Šค์นผ๋ผ
    • ๋ถ„๊ธฐ ์˜ˆ์ธก
    • ๋น„์ˆœ์ฐจ์  ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ
  • ํ•˜๋“œ์›จ์–ด ๋ฐ ์ปดํ“จํŒ… ๋ฐฉ๋ฒ•๋ก 
    • ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ

 

1.2. ํฐ ๋…ธ์ด๋งŒ ๊ตฌ์กฐ

ํฐ ๋…ธ์ด๋งŒ์€ ์ปดํ“จํ„ฐ์— ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ์—ฐ์‚ฐ๊ณผ ์ œ์–ด โžก๏ธ ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜(Central Processing Unit, CPU)
  2. ์ €์žฅ โžก๏ธ ๊ธฐ์–ต์žฅ์น˜(memory)
  3. ์žฅ์น˜ ๊ฐ„ ๋ฐ์ดํ„ฐ/์ œ์–ด ์‹ ํ˜ธ ๊ตํ™˜ โžก๏ธ๋ฒ„์Šค(bus)

 

 

 

1.2.1. ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜๐Ÿง 

CPU์˜ ์—ญํ• 

ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ๋‘๋‡Œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์ผ๋ จ์˜ ๋ชจ๋“  ๊ณผ์ •์ด CPU์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

CPU์˜ ๊ตฌ์„ฑ

  • ์‚ฐ์ˆ ๋…ผ๋ฆฌ์žฅ์น˜(Arithmetic Logic Unit, ALU) : ์‚ฐ์ˆ /๋…ผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌ
  • ์ œ์–ด์žฅ์น˜(Control Unit) : CPU๋ฅผ ์ œ์–ด
  • ๋ ˆ์ง€์Šคํ„ฐ(Register) : CPU์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • etc

1.2.2. ๊ธฐ์–ต์žฅ์น˜๐Ÿ’พ

์šฉ๋„์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ„๋ฅ˜

  • ์ฃผ๊ธฐ์–ต์žฅ์น˜ : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    - ๋žจ(Random-Access Memory, RAM)
  • ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜ : ์šด์˜ ์ฒด์ œ, ํ”„๋กœ๊ทธ๋žจ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์žฅ๊ธฐ๊ฐ„ ๋ณด๊ด€ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
    - ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ(Hard Disk Drive, HDD), SSD(Solid State Drive)

1.2.3. ๋ฒ„์Šค๐ŸšŒ

์ปดํ“จํ„ฐ ๋ถ€ํ’ˆ๊ณผ ๋ถ€ํ’ˆ ์‚ฌ์ด ๋˜๋Š” ์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ ์‚ฌ์ด์— ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š” ํ†ต๋กœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

๋ฒ„์Šค์˜ ์ข…๋ฅ˜

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋™ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ„์Šค(Data Bus)
  • ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ฃผ์†Œ ๋ฒ„์Šค(Address Bus)
  • ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ์ œ์–ด ๋ฒ„์Šค(Control Bus)
  • ๋žœ์„ ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ „์†ก ์†Œํ”„ํŠธ์›จ์–ด, ํ”„๋กœํ† ์ฝœ

 

๐Ÿ’ก ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์žˆ๋Š”๋ฐ CPU ์•ˆ์— ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

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

 

 

1.3. ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ

๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ(Instruction Set Architecture, ISA) : CPU๊ฐ€ ํ•ด์„ํ•˜๋Š” ๋ช…๋ น์–ด์˜ ์ง‘ํ•ฉ
ํ”„๋กœ๊ทธ๋žจ์€ ๊ธฐ๊ณ„์–ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด ์ด ๋ช…๋ น์–ด๋“ค์„ CPU๊ฐ€ ์ฝ๊ณ , ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ ์ข…๋ฅ˜

  •  IA-32 , x86-64(x64), MIPS, AVR ๋“ฑ

 ์ด๋ ‡๊ฒŒ ๋‹ค์–‘ํ•œ ISA๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋Š” ๋ชจ๋“  ์ปดํ“จํ„ฐ๊ฐ€ ๋™์ผํ•œ ์ˆ˜์ค€์˜ ์—ฐ์‚ฐ ๋Šฅ๋ ฅ์„ ์š”๊ตฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ…”์˜ x86-64๋Š” ๊ณ ์„ฑ๋Šฅ ํ”„๋กœ์„ธ์„œ๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ CPU๋“ค์€ ๋งŽ์€ ์ „๋ ฅ์„ ์†Œ๋ชจํ•˜๋ฉฐ, ๋ฐœ์—ด๋„ ์ƒ๋Œ€์ ์œผ๋กœ ์‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•ˆ์ •์ ์œผ๋กœ ์ „๋ ฅ์„ ๊ณต๊ธ‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ƒ‰๊ฐ ์žฅ์น˜๋ฅผ ๊ตฌ๋น„ํ•˜๋Š” ๋ฐ ๊ณต๊ฐ„์ƒ์˜ ๋ถ€๋‹ด์ด ํฌ์ง€ ์•Š์€ ๋ฐ์Šคํฌํ†ฑ ๋˜๋Š” ๋žฉํ†ฑ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
 ๊ทธ๋Ÿฌ๋‚˜ ๋“œ๋ก ๊ณผ ๊ฐ™์ด ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ๊ธฐ, ์ธ๊ณต์ง€๋Šฅ ์Šคํ”ผ์ปค์ฒ˜๋Ÿผ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ์ž„๋ฒ ๋””๋“œ ๊ธฐ๊ธฐ๋“ค์€ ์ด๋Ÿฌํ•œ ์ œ์•ฝ์กฐ๊ฑด์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์Šค๋งˆํŠธํฐ์€ ํ”ผ๋ถ€์— ๋‹ฟ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์—ด ๋ฌธ์ œ์— ๋ฏผ๊ฐํ•˜๊ณ , ๋ฐฐํ„ฐ๋ฆฌ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ธํ…”์˜ ๊ณ ์„ฑ๋Šฅ ํ”„๋กœ์„ธ์„œ๋ฅผ ์žฅ์ฐฉํ•˜๊ธฐ ๋งค์šฐ ๋ถ€์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŽ์€ ์ž„๋ฒ ๋””๋“œ ์žฅ๋น„๋“ค์€ ์ „๋ ฅ ์†Œ๋ชจ์™€ ๋ฐœ์—ด์ด ์ ์€ ARM์ด๋‚˜ MIPS ๋˜๋Š” AVR์˜ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 


3. x86-64 ์•„ํ‚คํ…์ฒ˜

 ๋Œ€๋‹ค์ˆ˜์˜ ๊ฐœ์ธ์šฉ ์ปดํ“จํ„ฐ๋“ค์ด ์ธํ…”์˜ x64 CPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. x64 ์•„ํ‚คํ…์ฒ˜๋Š” ์ธํ…”์˜ 64๋น„ํŠธ CPU ์•„ํ‚คํ…์ฒ˜๋กœ, ์ธํ…”์˜ 32๋น„ํŠธ CPU ์•„ํ‚คํ…์ฒ˜์ธ IA-32๋ฅผ ํ™•์žฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


n ๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜
 n์€ CPU๊ฐ€ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ๊ณผํ•™์—์„œ๋Š” ์ด๋ฅผ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋‹จ์œ„๋ผ๋Š” ์˜๋ฏธ์—์„œ WORD๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
 WORD์˜ ํฌ๊ธฐ๋Š” CPU์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ฐ˜์ ์ธ 32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์—์„œ ALU๋Š” 32๋น„ํŠธ๊นŒ์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ ˆ์ง€์Šคํ„ฐ์˜ ์šฉ๋Ÿ‰ ๋ฐ ๊ฐ์ข… ๋ฒ„์Šค๋“ค์˜ ๋Œ€์—ญํญ์ด 32๋น„ํŠธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋“ค๋กœ ๊ตฌ์„ฑ๋œ CPU๋Š” ์„ค๊ณ„ ์ƒ 32๋น„ํŠธ์˜ ๋ฐ์ดํ„ฐ๊นŒ์ง€๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 


WORD๊ฐ€ ํฌ๋ฉด ์œ ๋ฆฌํ•œ ์ 

  • ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ : CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„

 ํ˜„๋Œ€์˜ PC๋Š” ๋Œ€๋ถ€๋ถ„ 64๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์˜ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ทธ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” 32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์˜ CPU๊ฐ€ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ตœ๋Œ€ 4,294,967,296๋ฐ”์ดํŠธ(=4๊ธฐ๊ฐ€ ๋ฐ”์ดํŠธ) ํฌ๊ธฐ์˜ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ์ „๋ฌธ ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ์„ ์‹คํ–‰ํ•˜๊ธฐ์—” ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
 ๋ฐ˜๋ฉด, 64๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ด๋ก ์ƒ 16์—‘์‚ฌ ๋ฐ”์ดํŠธ(=16,777,216 ํ…Œ๋ผ๋ฐ”์ดํŠธ)์˜ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์›ฌ๋งŒํ•ด์„œ๋Š” ์™„์ „ํ•œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ํฐ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค.

 

 

x86-64์˜ ์—ฌ๋Ÿฌ ์ด๋ฆ„: Intel64, IA-32e, amd64, EM64T …

๋ณต์žกํ•œ ๊ฐœ๋ฐœ๊ณผ์ •์„ ๊ฑฐ์ณค๊ธฐ ๋•Œ๋ฌธ์— x86-64๋Š” ์—ฌ๋Ÿฌ ์ด๋ฆ„์„ ๊ฐ–๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ•ดํ‚น์„ ํ•˜๋‹ค๋ณด๋ฉด amd64๋ผ๋Š” ๋ช…์นญ์„ ์ž์ฃผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, x86-64์™€ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

 

 

3.1. ๋ ˆ์ง€์Šคํ„ฐ

  • ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ(General Register)
  • ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ(Segment Register)
  • ๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ(Instruction Pointer Register, IP)
  • ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ(Flag Register)

 

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

 x86-64์—์„œ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋Š” 8๋ฐ”์ดํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ 2^64 - 1๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์€ ์ฃผ ์šฉ๋„๊ฐ€ ์žˆ์œผ๋‚˜, ๊ทธ ์™ธ์˜ ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์œผ๋ฉฐ, ์ด ์™ธ์—๋„ x64์—๋Š” r8, r9, ... , r15๊ฐ€ ๋” ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฆ„ ์ฃผ ์šฉ๋„
rax (accumulator register) ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’
rbx (base register) x64์—์„œ๋Š” ์ฃผ๋œ ์šฉ๋„ ์—†์Œ
rcx (counter register) ๋ฐ˜๋ณต๋ฌธ์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜, ๊ฐ์ข… ์—ฐ์‚ฐ์˜ ์‹œํ–‰ ํšŸ์ˆ˜
rdx (data register) x64์—์„œ๋Š” ์ฃผ๋œ ์šฉ๋„ ์—†์Œ
rsi (source index) ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ ์›๋ณธ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
rdi (destination index) ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ ๋•Œ ๋ชฉ์ ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
rsp (stack pointer) ์‚ฌ์šฉ์ค‘์ธ ์Šคํƒ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
rbp (stack base pointer) ์Šคํƒ์˜ ๋ฐ”๋‹ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

 

 

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

x64 ์•„ํ‚คํ…์ณ์—๋Š” cs, ss, ds, es, fs, gs ์ด 6๊ฐ€์ง€์˜ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ํฌ๊ธฐ๋Š” 16๋น„ํŠธ์ž…๋‹ˆ๋‹ค.

 

x64 ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” 64๋น„ํŠธ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋„“์€ ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฃผ์†Œ ํ™•์žฅ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ๋ณด๋‹ค ์œ ์—ฐํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

3.1.3. ๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ

x64 ์•„ํ‚คํ…์ฒ˜์˜ ๋ช…๋ น์–ด ๋ ˆ์ง€์Šคํ„ฐ๋Š” rip์ด๋ฉฐ, 8๋ฐ”์ดํŠธ์ž…๋‹ˆ๋‹ค.

 

๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์—ญํ• 

CPU๊ฐ€ ์–ด๋А ๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญํ• 

 

3.1.4. ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ 

ํ”„๋กœ์„ธ์„œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ž์‹ ์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๋น„ํŠธ๋“ค๋กœ CPU์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

x64 ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” RFLAGS๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” 64๋น„ํŠธ ํฌ๊ธฐ์˜ ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ณผ๊ฑฐ 16๋น„ํŠธ ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ™•์žฅ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. RFLAGS๋Š” 64๋น„ํŠธ์ด๋ฏ€๋กœ ์ตœ๋Œ€ 64๊ฐœ์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 20์—ฌ๊ฐœ์˜ ๋น„ํŠธ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

ํ”Œ๋ž˜๊ทธ ์˜๋ฏธ
CF(Carry Flag) ๋ถ€ํ˜ธ ์—†๋Š” ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
ZF(Zero Flag) ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
SF(Sign Flag) ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
OF(Overflow Flag) ๋ถ€ํ˜ธ ์žˆ๋Š” ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.