๐Ÿชœ Computer System : 4. ํ”„๋กœ์„ธ์„œ ๊ตฌ์กฐ_part2

A Yeon Jangยท2025๋…„ 8์›” 4์ผ
post-thumbnail

SEQ์˜ ๊ตฌํ˜„

SEQ๋Š” Y86-64 ๋ช…๋ น์–ด๋“ค์„ ํ•œ ํด๋Ÿญ ์‚ฌ์ดํด์— ํ•˜๋‚˜์”ฉ, ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” CPU ์„ค๊ณ„ ๋ชจ๋ธ๋กœ ํŒŒ์ดํ”„๋ผ์ธ๋„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋„ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํด๋Ÿญ ์†๋„๊ฐ€ ๋งค์šฐ ๋А๋ฆฌ๋‹ค.

์ด๋ ‡๋“ฏ ๋งค์šฐ ๋А๋ฆฌ์ง€๋งŒ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„์— SEQ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š”๋ฐ์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•SEQPipeline
์ฒ˜๋ฆฌ ๋ฐฉ์‹์ˆœ์ฐจ์ ๋ณ‘๋ ฌ์ 
ํ•œ ์‚ฌ์ดํด์— ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด ์ˆ˜1๊ฐœ์ตœ๋Œ€ N๊ฐœ (์Šคํ…Œ์ด์ง€ ์ˆ˜๋งŒํผ)
์„ค๊ณ„ ๋ณต์žก๋„๋งค์šฐ ์‰ฌ์›€ ๐Ÿ˜Š๋ณต์žกํ•จ ๐Ÿ˜ต (ํ•ด์ €๋“œ ์ฒ˜๋ฆฌ ๋“ฑ)
์„ฑ๋Šฅ๋‚ฎ์Œ๋†’์Œ

SEQ์˜ ์ˆœ์ฐจ์  ์‹คํ–‰

โ‰๏ธ ๊ทธ๋ž˜์„œ SEQ๋Š” ํ•œ ์‚ฌ์ดํด์— ์–ด๋–ค ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธธ๋ž˜ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š”๊ฐ€?
SEQ๋Š” ํ•œ ์‚ฌ์ดํด์— ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋‹ค ๋ณด๋‹ˆ ํด๋Ÿญ ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์ง„๋‹ค.

  • ๋ช…๋ น์–ด ์ธ์ถœ (IF,fetch)
  • ๋””์ฝ”๋”ฉ (ID,decode)
  • ์‹คํ–‰ (EX,execution)
  • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ (MEM,memory)
  • ๊ฒฐ๊ณผ ์ €์žฅ (WB,writeback)
  • PC ๊ฐฑ์‹ 

๊ฐ ๋‹จ๊ณ„๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

1๏ธโƒฃ ๋ช…๋ น์–ด ์ธ์ถœ(Fetch)

ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

  • PC๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค์„ ์ฝ๋Š”๋‹ค
    : icdoe, ifun์„ ์ถ”์ถœ
  • ๋ ˆ์ง€์Šคํ„ฐ ๋˜๋Š” ์ƒ์ˆ˜๊ฐ’์ด ํ•„์š”ํ•œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ๊ฒฝ์šฐ ๋ ˆ์ง€์Šคํ„ฐ ์ง€์‹œ์ž ๋˜๋Š” ์ƒ์ˆ˜๊ฐ’ ๋˜ํ•œ ์ถ”์ถœ
    : rA, rB, ValC ์ถ”์ถœ
  • ๋‹ค์Œ ์ธ์ŠคํŠธ๋Ÿญ์…˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    : valP = PC + ๋ช…๋ น์–ด ๊ธธ์ด

๐Ÿ”ฅ ์ด๋•Œ ! valP๋ฅผ ๋‹จ์ˆœํžˆ PC + ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๊ธธ์ด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ด์œ **

โœ… "Y86-64 ๋ช…๋ น์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์—ฐ์†๋œ ๋ฐ”์ดํŠธ๋กœ ์ €์žฅ๋œ๋‹ค"
์ฆ‰, ๋ช…๋ น์–ด๋Š” ํ•ญ์ƒ PC๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, ๊ทธ ๋‹ค์Œ ๋ฐ”์ดํŠธ, ๋˜ ๊ทธ ๋‹ค์Œ ๋ฐ”์ดํŠธ... ์ด๋ ‡๊ฒŒ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์–ด์˜ ์ด ๊ธธ์ด๋ฅผ ์•Œ๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์‹œ์ž‘ ์œ„์น˜๋Š”
๐Ÿ‘‰ PC + ๋ช…๋ น์–ด ๊ธธ์ด โ†’ valP ์ธ ๊ฒƒ์ด๋‹ค.

2๏ธโƒฃ ํ•ด๋… (Decode)

๋ช…๋ น์–ด์— ๋“ค์–ด์žˆ๋Š” rA, rB๋ฅผ ์ด์šฉํ•ด R[rA] โ†’ valA, R[rB] โ†’ valB ๋กœ ์ฝ์–ด์˜ด

  • ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ์ฝ์–ด์˜จ๋‹ค
    : valA, valB

3๏ธโƒฃ ์‹คํ–‰ (Execution)

๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ์กฐ๊ฑด์ฝ”๋“œ๋“ค์„ ์„ค์ •ํ•œ๋‹ค

  • ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์ง€์‹œํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
    : ALU๊ฐ€ ifun ๊ฐ’์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค
    ๐Ÿ‘‰ valE = Execute ๋‹จ๊ณ„(ALU)์—์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ’
    ๐Ÿ‘‰ set CC = ์—ฐ์‚ฐ ํ›„์— ์กฐ๊ฑด์ฝ”๋“œ์˜ ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ œ์–ด ์‹ ํ˜ธ

4๏ธโƒฃ ๋ฉ”๋ชจ๋ฆฌ

ํ•„์š”์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•œ๋‹ค

  • ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค
    ๐Ÿ‘‰ valM = ์ฝ์–ด ์˜จ ๋ฐ์ดํ„ฐ ๊ฐ’

5๏ธโƒฃ ์žฌ๊ธฐ๋ก(write Back)

๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•œ๋‹ค.

  • ๋‘ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋กํ•œ๋‹ค

6๏ธโƒฃ PC ๊ฐฑ์‹ 

๋‹ค์Œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ์ฃผ์†Œ๋กœ PC๋ฅผ ์„ค์ •ํ•œ๋‹ค

  • ๋‹ค์Œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•œ๋‹ค
    : Fetch ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ๋˜์—ˆ๋˜ valP ๊ฐ’์„ PC์— ํ• ๋‹นํ•œ๋‹ค.
    ๐Ÿ‘‰ ์ฆ‰, PC๊ฐ’์ด ๊ฐฑ์‹ ๋˜๋Š”ํƒ€์ด๋ฐ์€ ๋ช…๋ น์–ด ์‹คํ–‰์ด ๋๋‚œ ๋‹ค์Œ์ด๋‹ค.

โ˜‘๏ธ ์ •๋ฆฌ

ํ”„๋กœ์„ธ์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋‹จ๊ณ„๋“ค์„ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณตํ•˜๋ฉฐ ํ•œ ๊ฐœ์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ์— ๋†€๋ผ์šด ์–‘์˜ ์ž‘์—…์„ ์š”๊ตฌํ•œ๋‹ค.
๋‹ค๋งŒ, ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค์ด ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ํ‘œ ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ธ์ŠคํŠธ๋Ÿญ์…˜๋ฅผ ์ผ๋ฐ˜์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์— ๋งž์ถฐ ๋„ฃ๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ๊ณ„์‚ฐ๋“ค์„ ์ฐพ๋Š” ๊ฒƒ์ด ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ํ‘œ๋“ค์€ ํ•˜๋“œ์›จ์–ด์— ์ง์ ‘ ๋งค์นญ๋  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๊ทธ๋ ค์ง„๋‹ค. ๋‹ค๋งŒ ์ดํ•ด๋ฅผ ๋„์šธ ๋ฟ ์‹ค์ œ ํšŒ๋กœ๋กœ ๋งŒ๋“ค๋•Œ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์—„๊ฒฉํ•˜๊ฒŒ ์ˆœ์ฐจ๋ฅผ ์ง€ํ‚ฌ ํ•„์š”๋Š” ์—†๋‹ค.

๐Ÿงช SEQ : push&pop

๐Ÿ“Œ Instruction: pushq rA

rA์˜ ๊ฐ’์„ ์Šคํƒ์— ์ €์žฅํ•˜๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ SEQ

โ›“๏ธ Pipeline Stages

StageOperationExplanation
Fetchicode:ifun โ† M1[PC]Fetch instruction code
rA:rB โ† M1[PC+1]Get register specifier
valP โ† PC + 2Next instruction address
DecodevalA โ† R[rA]Value to push
valB โ† R[%rsp]Current stack pointer
ExecutevalE โ† valB + (-8)Allocate space on stack
MemoryM8[valE] โ† valAStore rA's value to new stack slot
Write BackR[%rsp] โ† valEUpdate stack pointer
PC UpdatePC โ† valPMove to next instruction

๐Ÿ“Œ Instruction: popq rA

์Šคํƒ์—์„œ ๊ฐ’์„ ๊บผ๋‚ด์„œ rA์— ์ €์žฅํ•˜๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์˜ SEQ

โ›“๏ธ Pipeline Stages

StageOperationExplanation
Fetchicode:ifun โ† M1[PC]Fetch instruction code
rA:rB โ† M1[PC+1]Get register specifier
valP โ† PC + 2Next instruction address
DecodevalA โ† R[%rsp]Current top of stack address
valB โ† R[%rsp]For computing new %rsp
ExecutevalE โ† valB + 8Reclaim space on stack
MemoryvalM โ† M8[valA]Load value from top of stack
Write BackR[rA] โ† valMStore popped value to rA
R[%rsp] โ† valEUpdate stack pointer
PC UpdatePC โ† valPMove to next instruction

๐Ÿ”ถ SEQ ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋งˆ๋ฌด๋ฆฌ

์œ„์—์„œ ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋Š” ์ด์ œ Y86-64์˜ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ฒŒ 6๊ฐ€์ง€ ๋‹จ๊ณ„์˜ ํ†ต์ผ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์ด์–ด์„œ ํ•  ๋‚ด์šฉ์€ ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋“ค์„ ์‹ค์ œ ๊ตฌํ˜„ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์ด๋“ค์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ› ๏ธ SEQ ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ

๋‹ค์Œ ๊ทธ๋ฆผ์€ Y86-64์˜ ๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด ๊ตฌ์กฐ์˜ ์ถ”์ƒ์ ์ธ ๊ด€์ ์ด๋‹ค.

โš™๏ธ ํ•˜๋“œ์›จ์–ด ์œ ๋‹›

โ˜‘๏ธ ์„ ์ž…

  • ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ฉ”๋ชจ๋ฆฌ : ๋ช…๋ น์–ด ์ฝ๊ธฐ
  • PC ๊ฐ€์‚ฐ๊ธฐ : ์ฆ๊ฐ€๋œ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋ฅผ ๊ณ„์‚ฐ

โ˜‘๏ธ ํ•ด๋…

  • ๋‘ ๊ฐœ์˜ ์ฝ๊ธฐ ํฌํŠธ : ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’ ์ฝ์Œ

โ˜‘๏ธ ์‹คํ–‰

  • ALU : ์ •ํ•ด์ง„ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ (์Šคํƒ ํฌ์ธํ„ฐ ๊ณ„์‚ฐ, ์œ ํšจ ์ฃผ์†Œ ๊ณ„์‚ฐ ๋“ฑ)
  • CC ์กฐ๊ฑด์ฝ”๋“œ ๋ ˆ์ง€์Šคํ„ฐ : ์„ธ๊ฐœ์˜ ์กฐ๊ฑด์ฝ”๋“œ ๋น„ํŠธ๋ฅผ ์ €์žฅ

โ˜‘๏ธ ๋ฉ”๋ชจ๋ฆฌ

  • ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ : ๋ฉ”๋ชจ๋ฆฌ ์ธ์ŠคํŠธ๋Ÿญ์…˜ ์‹คํ–‰ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์›Œ๋“œ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์”€

โ˜‘๏ธ ์žฌ๊ธฐ๋ก

  • EํฌํŠธ : ALU์— ์˜ํ•ด ๊ณ„์‚ฐ ๋œ ๊ฐ’ ๊ธฐ๋ก
  • ํฌํŠธM : ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด์˜จ ๊ฐ’์„ ๊ธฐ๋ก

โ˜‘๏ธ PC ๊ฐฑ์‹ 

  • ์ƒˆ๋กœ์šด PC๊ฐ’ : valP, valM, call์ด๋‚˜ jump ์ธ์ŠคํŠธ๋Ÿญ์…˜์— ์˜ํ•œ ์ฃผ์†Œ ๋“ฑ

โ‰๏ธ ์ด๋•Œ, ์„ ์ž… ๋‹จ๊ณ„์— ์žˆ๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๊ณ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ™์€ RAM์ด๋‹ค.
๊ทธ์ €, ๋‹ค๋ฅธ ๋ชฉ์ ๊ณผ ๋‹ค๋ฅธ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ์œ„ํ•ด ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ๋ช…๋ช…ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ”— ํ•˜๋“œ์›จ์–ด & ์ธ์ŠคํŠธ๋Ÿญ์…˜

๊ฒฐ๊ตญ ์œ„์—์„œ ํ–ˆ๋˜ ๋ชจ๋“  ๊ณ„์‚ฐ๋“ค(ex. push/pop)์„ ๋ฐฉ๊ธˆ ๋ณธ ์‹ค์ œ ํ•˜๋“œ์›จ์–ด๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฐ ์ œ์–ด ๋กœ์ง์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
๋‹ค์‹œ๋งํ•ด ALU๋ฅผ ์ผค์ง€ ๋ง์ง€, ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ• ์ง€ ๋ง์ง€, ์–ด๋–ค ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ์ง€ ๋“ฑ์˜ ์ƒ์„ธ ์„ค๊ณ„๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โฑ๏ธ SEQ์˜ ํƒ€์ด๋ฐ

์œ„์—์„œ push/pop์˜ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์ฒ˜๋ฆฌ๋˜๋Š” ํ‘œ๋ฅผ ๋ดค๊ณ , ํ•˜๋“œ์›จ์–ด์˜ ๊ตฌ์กฐ๋„ ๋ดค๋‹ค.
ํ‘œ์—์„œ๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์‹œํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ์‹ค์ œ ํ•˜๋“œ์›จ์–ด๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ ์—†์ด ์ „๋ถ€ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•œ๋‹ค.
์ฆ‰, ํ•˜๋“œ์›จ์–ด๋Š” ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋˜๋Š” ํŠน์ • ํด๋Ÿญ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋ชจ๋“  ํšŒ๋กœ์— ์ˆœ์‹๊ฐ„์— ์‹ ํ˜ธ๊ฐ€ ํผ์ง€๊ณ  ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

SEQ์˜ ๊ตฌ์„ฑ์š”์†Œ

SEQ๋Š” ์กฐํ•ฉ๋…ผ๋ฆฌํšŒ๋กœ์™€ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฉ”๋ชจ๋ฆฌ ์žฅ์น˜๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

๐Ÿ”ถ ์กฐํ•ฉ๋…ผ๋ฆฌํšŒ๋กœ

์ˆœ์ฐจ์ฒ˜๋ฆฌ๋‚˜ ์ œ์–ด๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ €์ ˆ๋กœ ์ „ํŒŒ๋œ๋‹ค.
์ฆ‰, ํด๋Ÿญ์ด๋‚˜ ํƒ€์ด๋ฐ ์‹ ํ˜ธ ์—†์ด ์ž‘๋™ํ•œ๋‹ค.

๐Ÿ”ถ ์ฒซ๋ฒˆ์งธ ๋ฉ”๋ชจ๋ฆฌ ์žฅ์น˜ : ๋žœ๋ค ์—‘์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ(RAM)

๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ, ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

์ด๋•Œ, ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ์ˆœ๊ฐ„๋งˆ๋‹ค ๊ฒฐ๊ณผ ๊ฐ’์ด ๋ฐ”๋กœ ๋‚˜์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์กฐํ•ฉ๋…ผ๋ฆฌ์ฒ˜๋Ÿผ ๊ณ ๋ คํ•ด๋„ ๋œ๋‹ค.

๐Ÿ”ถ ๋‘๋ฒˆ์งธ ๋ฉ”๋ชจ๋ฆฌ ์žฅ์น˜ : ๋ ˆ์ง€์Šคํ„ฐ

ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ, ์กฐ๊ฑด์ฝ”๋“œ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

๐Ÿ”น ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ, ์กฐ๊ฑด์ฝ”๋“œ ๋ ˆ์ง€์Šคํ„ฐ, ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ, ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ

SEQ ๊ตฌ์„ฑ์š”์†Œ๋“ค ์ค‘์—์„œ ์œ„์˜ 4๊ฐ€์ง€๋Š” ์ธ์ŠคํŠธ๋Ÿญ์…˜ ๋ฉ”๋ชจ๋ฆฌ, ์กฐํ•ฉ๋…ผ๋ฆฌํšŒ๋กœ์™€ ๋‹ฌ๋ฆฌ ํด๋Ÿญ ์‹ ํ˜ธ์— ์˜ํ•ด์„œ ์ œ์–ด๋œ๋‹ค.
์ด์ฒ˜๋Ÿผ ๋ ˆ์ง€์Šคํ„ฐ๋“ค๊ณผ ๋ฉ”๋ชจ๋ฆฌ์— ํด๋Ÿญ์„ ๊ณต๊ธ‰ํ•˜๋Š” ๊ฒƒ์€, ์šฐ๋ฆฌ๊ฐ€ ์„ค๊ณ„ํ•œ ํ”„๋กœ์„ธ์„œ์—์„œ ์—ฌ๋Ÿฌ ๋™์ž‘๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด๋‹ค.

โ›“๏ธ SEQ ๊ตฌ์กฐ์—์„œ์˜ ํ•ต์‹ฌ ์›์น™: No Reading Back

๐Ÿงญ No Reading Back

No Reading Back Principle
โ†’ "ํ•œ ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ์ž์‹ ์ด ๊ฐฑ์‹ ํ•œ ์ƒํƒœ๊ฐ’์„ ๋‹ค์‹œ ์ฝ๋Š” ๋™์ž‘์€ ์—†์–ด์•ผ ํ•œ๋‹ค."

โœ… ์ด ์›์น™์ด ํ•„์š”ํ•œ ์ด์œ 

  • ํ•˜๋‚˜์˜ ํด๋Ÿญ ์‚ฌ์ดํด ๋™์•ˆ ์ƒํƒœ(state)๋Š” ํด๋Ÿญ ์ƒ์Šน ์‹œ์ ์— ํ•œ ๋ฒˆ๋งŒ ์—…๋ฐ์ดํŠธ๋จ.
  • ๋”ฐ๋ผ์„œ ์ธ์ŠคํŠธ๋Ÿญ์…˜ ์ฒ˜๋ฆฌ ์ค‘์— ๋ฐฉ๊ธˆ ๊ฐฑ์‹ ํ•œ ๊ฐ’์„ ๋‹ค์‹œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ.
  • ์ด๋ฅผ ์œ„๋ฐ˜ํ•˜๋ฉด ์ˆœ์ฐจ์ ์ธ ๋™์ž‘ ๋ณด์žฅ์ด ์–ด๋ ค์›Œ์ง โ†’ ๋””์ž์ธ ๋ณต์žก์„ฑ ์ฆ๊ฐ€ + ํƒ€์ด๋ฐ ์ด์Šˆ ๋ฐœ์ƒ

๐Ÿ“ฆ ์˜ˆ์‹œ 1: pushq ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ

โŒ ์ž˜๋ชป๋œ ์„ค๊ณ„

  1. %rsp๋ฅผ 8๋งŒํผ ๊ฐ์†Œ
  2. ์—…๋ฐ์ดํŠธ๋œ %rsp ๊ฐ’์„ ๋‹ค์‹œ ์ฝ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

โ†’ ์ด๋Š” ์ƒํƒœ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ ํ›„ ๋‹ค์‹œ ์ฝ๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์›์น™ ์œ„๋ฐ˜!

โœ… ์˜ฌ๋ฐ”๋ฅธ SEQ ๊ตฌํ˜„

  • ๊ฐ์†Œ๋œ %rsp - 8 ๊ฐ’์„ valE๋กœ ์ƒ์„ฑ
  • valE๋ฅผ:
    • ๋ ˆ์ง€์Šคํ„ฐ ์“ฐ๊ธฐ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ
    • ๋ฉ”๋ชจ๋ฆฌ ์“ฐ๊ธฐ ์ฃผ์†Œ๋กœ๋„ ์‚ฌ์šฉ

โ†’ ๊ฐฑ์‹ ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  valE๋ผ๋Š” ์ƒ์ˆ˜๊ฐ™์€ ์ƒ์„ฑ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„
โ†’ ๋™์ผํ•œ valE๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ ˆ์ง€์Šคํ„ฐ์— ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
โ†’ ํด๋Ÿญ ์ƒ์Šน ์‹œ์ ์— ๋ชจ๋“  ์“ฐ๊ธฐ ๋™์ž‘์ด ์ •๋ ฌ๋จ


๐Ÿ“ฆ ์˜ˆ์‹œ 2: Condition Codes (ZF, SF, OF)

๐Ÿ”„ ์‚ฌ์šฉ ํ๋ฆ„

  • addq, subq ๋“ฑ์€ Condition Codes๋ฅผ ์„ค์ •
  • jXX, cmovXX ๋“ฑ์€ Condition Codes๋ฅผ ์ฝ์Œ

โœ… ์›์น™ ์ค€์ˆ˜

  • ์–ด๋–ค ๋ช…๋ น์–ด๋„ ์กฐ๊ฑด ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ณง๋ฐ”๋กœ ์ฝ์ง€ ์•Š์Œ
  • ์กฐ๊ฑด ์ฝ”๋“œ๋Š” ํ•ญ์ƒ ๋‹ค์Œ ์‚ฌ์ดํด์— ์ฝ์Œ
    • โ†’ ์ฆ‰, ์ฝ๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ํ•œ ์‚ฌ์ดํด์˜ ์ง€์—ฐ์ด ์กด์žฌ

๐Ÿ” SEQ์—์„œ ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ํ๋ฆ„

๐ŸŒ€ ์‚ฌ์ดํด๋ณ„ ๋™์ž‘

โ–ถ Cycle 3 ์‹œ์ž‘ ์‹œ

  • %rbx๋Š” ์•„์ง 0x100 ์ƒํƒœ (addq ๊ฒฐ๊ณผ ๋ฐ˜์˜ ์ „)
  • ์กฐํ•ฉ๋…ผ๋ฆฌ๋Š” ์•„์ง ๋ฐ˜์‘ ์ „ (ํ•˜์–€ ๋ฐ•์Šค)

โ–ถ Cycle 3 ์ข…๋ฃŒ ์‹œ

  • %rbx โ† 0x300 (addq ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ)
  • Condition Code โ† 000 (ZF=0)
  • PC โ† 0x016

โ–ถ Cycle 4 ์ข…๋ฃŒ ์‹œ

  • je ์ˆ˜ํ–‰: ZF=0 โ†’ ๋ถ„๊ธฐ ์‹คํŒจ โ†’ PC โ† 0x01f
  • ์กฐํ•ฉ๋…ผ๋ฆฌ๊ฐ€ ๋ถ„๊ธฐ ์‹คํŒจ ๋ฐ˜์˜ ์™„๋ฃŒ

๐Ÿง  ์š”์•ฝ

  • SEQ๋Š” ๊ฐ ์ƒํƒœ ์š”์†Œ(๋ ˆ์ง€์Šคํ„ฐ, PC, ๋ฉ”๋ชจ๋ฆฌ, CC ๋“ฑ) ๋ฅผ ์˜ค์ง ํ•œ ๋ฒˆ๋งŒ ์—…๋ฐ์ดํŠธํ•จ
  • ๋ชจ๋“  ์—…๋ฐ์ดํŠธ๋Š” ํด๋Ÿญ ์ƒ์Šน ์ˆœ๊ฐ„ ๋™์‹œ์— ๋ฐœ์ƒ
  • ์ด ์›์น™ ๋•๋ถ„์— ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์ˆœ์ฐจ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ ์„ค๊ณ„ ๊ฐ€๋Šฅ!

๐Ÿชœ SEQ ๋‹จ๊ณ„์˜ ๊ตฌํ˜„

๋ชจ๋“  ์ธ์ŠคํŠธ๋Ÿญ์…˜์„ ํ•˜๋“œ์›จ์–ด๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฐ ์ œ์–ด๋กœ์ง์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฌํ•œ ์ œ์–ด๋กœ์ง ๋ธ”๋ก์„ ์œ„ํ•œ HCL(Hardware Control Language) ์ž‘์„ฑ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์€ ์•ž์œผ๋กœ ๋ณผ HCL ๋ฌธ์žฅ์—์„œ ์‚ฌ์šฉํ•  ์ƒ์ˆ˜ ๊ฐ’์œผ๋กœ ๊ฐ๊ฐ
์ธ์ŠคํŠธ๋Ÿญ์…˜ ์ธ์ฝ”๋”ฉ, ํ•จ์ˆ˜์ฝ”๋“œ, ๋ ˆ์ง€์Šคํ„ฐID, ALU์—ฐ์‚ฐ, ์ƒํƒœ์ฝ”๋“œ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๐Ÿ”น Fetch(์„ ์ž… ๋‹จ๊ณ„)

๋‹จ๊ณ„)

bool need_regids =
icode in { IRRMOVQ, IOPQ, IPUSHQ, IPOPQ,
IIRMOVQ, IRMMOVQ, IMRMOVQ };

๐Ÿง  ํ•ต์‹ฌ

  • Instruction Memory ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

    • PC๋ฅผ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ํ•˜์—ฌ 10๋ฐ”์ดํŠธ๋ฅผ ์ฝ๋Š”๋‹ค
    • ์ฒซ ๋ฒˆ์งธ ๋ฐ”์ดํŠธ (Byte 0): Instruction Byte
      • Split ๋ธ”๋ก์—์„œ ๋‘ ๊ฐœ์˜ 4-bit ๊ฐ’์œผ๋กœ ๋ถ„ํ• :
        • icode: Instruction Code = ๋ช…๋ น์–ด์˜ ์ข…๋ฅ˜
        • ifun: Function Code = ๋ช…๋ น์–ด์˜ ์„ธ๋ถ€ ๋™์ž‘
  • Align ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

    • 1-9 ๋ฒˆ์งธ ๋ฐ”์ดํŠธ (Byte 0์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€):
      • ๋ ˆ์ง€์Šคํ„ฐ ํ•„๋“œ์™€ ์ƒ์ˆ˜ ์›Œ๋“œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • PC increment ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

    • ํ˜„์žฌ์˜ pc๊ฐ’, need_regids ๊ฐ’ r, need_valC ๊ฐ’์œผ๋กœ valP ๋งŒ๋“ ๋‹ค.

๐Ÿ”Ž ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • imem_error:
    • ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ์ผ ๊ฒฝ์šฐ imem_error ์‹ ํ˜ธ๊ฐ€ ํ™œ์„ฑํ™”๋œ๋‹ค.
    • ์ด ๊ฒฝ์šฐ icode, ifun์€ nop ๋ช…๋ น์–ด ๊ฐ’(0) ์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค.

โœ… ๊ฒฐ๊ณผ

  • Control Logic์€ icode ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ 3๊ฐœ์˜ 1๋น„ํŠธ ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
    (์ด ์ œ์–ด ์‹ ํ˜ธ๋“ค์€ ์ ์„ ์œผ๋กœ ํ‘œํ˜„๋จ โ€” ๋„์‹ ๊ธฐ์ค€)
    • instr_valid : ์ด ๋ฐ”์ดํŠธ๋Š” ํ•ฉ๋ฒ•์ ์ธ Y86-64 ์ธ์ŠคํŠธ๋Ÿญ์…˜์ธ๊ฐ€?
    • need_regids : ์ด ์ธ์ŠคํŠธ๋Ÿญ์…˜์€ ๋ ˆ์ง€์Šคํ„ฐ ์ง€์ • ๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•˜๋Š”๊ฐ€?
    • need_valC : ์ด ์ธ์ŠคํŠธ๋Ÿญ์…˜์€ ์ƒ์ˆ˜ ์›Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š”๊ฐ€?

๐Ÿ”น Decode and Write-Back (ํ•ด๋…๊ณผ ์žฌ๊ธฐ๋ก ๋‹จ๊ณ„)

word srcA = [
icode in { IRRMOVQ, IRMMOVQ, IOPQ, IPUSHQ } : rA;
icode in { IPOPQ, IRET } : RRSP;
1 : RNONE; # Donโ€™t need register
];

word dstE = [
icode in { IRRMOVQ } : rB;
icode in { IIRMOVQ, IOPQ} : rB;
icode in { IPUSHQ, IPOPQ, ICALL, IRET } : RRSP;
1 : RNONE; # Donโ€™t write any register
];

๋‘ ๋‹จ๊ณ„ ๋ชจ๋‘ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ๊ป˜ ์„ค๋ช…ํ•œ๋‹ค.

๐Ÿง  ํ•ต์‹ฌ

  • ์ธ์ŠคํŠธ๋Ÿญ์…˜ ์ฝ”๋“œ, ๋ ˆ์ง€์Šคํ„ฐ ์ง€์ •์ž rA, rB, ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ๊ณ„์‚ฐ๋œ ์กฐ๊ฑด์‹ ํ˜ธ Cnd์— ๊ธฐ์ดˆํ•˜์—ฌ 4๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐID๋ฅผ ๊ตฌ์„ฑ
  • ๋‘ ๊ฐœ์˜ ์ฝ๊ธฐ ํฌํŠธ์™€ ์“ฐ๊ธฐ ํฌํŠธ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • ์ฝ๊ธฐ ํฌํŠธ(srcA, srcB =valA, valB)
    • ์“ฐ๊ธฐ ํฌํŠธ(dstM, dstE =valM, valE)

๐Ÿ”น Execute(์‹คํ–‰ ๋‹จ๊ณ„)

word aluA = [
icode in { IRRMOVQ, IOPQ } : valA;
icode in { IIRMOVQ, IRMMOVQ, IMRMOVQ } : valC;
icode in { ICALL, IPUSHQ } : -8;
icode in { IRET, IPOPQ } : 8;
# Other instructions donโ€™t need ALU
];

๐Ÿง  ํ•ต์‹ฌ

  • ์‚ฐ์ˆ /๋…ผ๋ฆฌ ์œ ๋‹› ALU๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • aluA, aluB, alufun ์‹ ํ˜ธ์˜ ์„ค์ •์— ๋”ฐ๋ผ ์‹คํ–‰๋œ๋‹ค.
  • CC(์กฐ๊ฑด์ฝ”๋“œ ๋ ˆ์ง€์Šคํ„ฐ) ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • ALU์—์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋กœ๋ถ€ํ„ฐ ์กฐ๊ฑด์ฝ”๋“œ (ZF, SF, OF ๋“ฑ) ๋ฅผ ๋ฐ›์•„์„œ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ
    • Set CC๋Š” ์–ด๋–ค ๋ช…๋ น์–ด(icode)์ผ ๋•Œ๋งŒ ์กฐ๊ฑด์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ• ์ง€๋ฅผ ํŒ๋‹จํ•จ
    • ์ดํ›„ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ ํŒ๋‹จ์šฉ cond ๋ธ”๋ก์—์„œ ์ด CC ๊ฐ’์„ ์ฝ์–ด์„œ ์กฐ๊ฑด ๋ถ„๊ธฐ ์ˆ˜ํ–‰

๐Ÿ”น Memory(๋ฉ”๋ชจ๋ฆฌ ๋‹จ๊ณ„)

word mem_addr = [
icode in { IRMMOVQ, IPUSHQ, ICALL, IMRMOVQ } : valE;
icode in { IPOPQ, IRET } : valA;
# Other instructions donโ€™t need address
];

bool mem_read = icode in { IMRMOVQ, IPOPQ, IRET };

๐Ÿง  ํ•ต์‹ฌ

- ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ญ์ƒ valE ๋˜๋Š” valA ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ฝ๊ธฐ/์“ฐ๊ธฐ ์—ฌ๋ถ€๋Š” icode์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ์ฝ๊ธฐ ๊ฒฐ๊ณผ๋Š” valM์œผ๋กœ ์ €์žฅ๋œ๋‹ค.

๐Ÿ”น PC Update(PC ๊ฐฑ์‹  ๋‹จ๊ณ„)

word new_pc = [
# Call. Use instruction constant
icode == ICALL : valC;
# Taken branch. Use instruction constant
icode == IJXX && Cnd : valC;
# Completion of RET instruction. Use value from stack
icode == IRET : valM;
# Default: Use incremented PC
1 : valP;
];                            

๐Ÿง  ํ•ต์‹ฌ

-SEQ์˜ ์ตœ์ข…๋‹จ๊ณ„๋กœํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.

  • ์ธ์ŠคํŠธ๋Ÿญ์…˜ ํƒ€์ž…๊ณผ ๋ถ„๊ธฐ๋ฅผ ํƒํ•  ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ valC/valM/valP ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ฅ SEQ์˜ ํ•œ๊ณ„์™€ ํŒŒ์ดํ”„๋ผ์ด๋‹์˜ ํ•„์š”์„ฑ

โœ… SEQ์˜ ์žฅ์ 

  • Y86-64 ํ”„๋กœ์„ธ์„œ์˜ ๋ชจ๋“  ๋ช…๋ น์–ด ์‹คํ–‰ ๊ณผ์ •์„ ํ•˜๋‚˜์˜ ํ†ต์ผ๋œ ํ๋ฆ„(uniform flow) ์œผ๋กœ ๊ตฌ์„ฑ
  • ์†Œ์ˆ˜์˜ ํ•˜๋“œ์›จ์–ด ์œ ๋‹›๊ณผ ํ•˜๋‚˜์˜ ํด๋Ÿญ ์‹ ํ˜ธ๋งŒ์œผ๋กœ ์ „์ฒด ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ์ œ์–ด ๋…ผ๋ฆฌ๋Š” instruction type๊ณผ ๋ถ„๊ธฐ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅธ ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

โŒ SEQ์˜ ํ•œ๊ณ„: ๋А๋ฆฐ ํด๋Ÿญ ์†๋„

  • ๋ชจ๋“  ๋™์ž‘์„ ํ•˜๋‚˜์˜ ํด๋Ÿญ ์‚ฌ์ดํด ๋‚ด์—์„œ ์™„๋ฃŒํ•ด์•ผ ํ•จ
    • ์ฆ‰, ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์ง๋ ฌ๋กœ ์ง„ํ–‰๋จ
    • ๋”ฐ๋ผ์„œ ํด๋Ÿญ ์‚ฌ์ดํด์ด ๋งค์šฐ ๋А๋ฆฌ๊ฒŒ ๋™์ž‘ํ•ด์•ผ ํ•จ

๐Ÿ“‰ ์˜ˆ์‹œ: ret ๋ช…๋ น์–ด

ret ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์˜ ๋™์ž‘์ด ๋ชจ๋‘ ํ•˜๋‚˜์˜ ์‚ฌ์ดํด ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•จ:

  1. ๋ช…๋ น์–ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ret ๋ช…๋ น์–ด ์ฝ๊ธฐ
  2. ์Šคํƒ ํฌ์ธํ„ฐ(%rsp)๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์—์„œ ์ฝ๊ธฐ
  3. ALU๋ฅผ ํ†ตํ•ด %rsp + 8 ๊ณ„์‚ฐ
  4. ์ƒˆ๋กœ์šด %rsp ๊ฐ’์„ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฆฌํ„ด ์ฃผ์†Œ๋ฅผ ์ฝ๊ธฐ
  5. ์ฝ์€ ๋ฆฌํ„ด ์ฃผ์†Œ๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(PC)์— ์„ค์ •

โฑ ์œ„ ๊ณผ์ •์ด ๋ชจ๋‘ ํ•œ ํด๋Ÿญ ์ƒ์Šน ์‹œ์  ๋‚ด์— ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, ํด๋Ÿญ์„ ๋งค์šฐ ๋А๋ฆฌ๊ฒŒ ํ•ด์•ผ ํ•จ


๐Ÿ›  ๋น„ํšจ์œจ์ ์ธ ์ž์› ์‚ฌ์šฉ

  • ๊ฐ ํ•˜๋“œ์›จ์–ด ์œ ๋‹›(ALU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)์€ ํ•œ ์‚ฌ์ดํด ๋‚ด์˜ ์ผ๋ถ€ ์‹œ๊ฐ„๋งŒ ์‚ฌ์šฉ๋จ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž์› ํ™œ์šฉ๋„๋Š” ๋‚ฎ๊ณ , ์—๋„ˆ์ง€/์†๋„ ๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ž„

๐Ÿš€ ํ•ด๊ฒฐ์ฑ…: ํŒŒ์ดํ”„๋ผ์ด๋‹(Pipelining)

  • ํ•˜๋“œ์›จ์–ด ์ž์›์„ ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ถ„ํ•  ์‹คํ–‰
  • ๊ฐ ๋ช…๋ น์–ด๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์ดํด์— ๊ฑธ์ณ ๋‹ค๋ฅธ ์Šคํ…Œ์ด์ง€๋ฅผ ์ˆ˜ํ–‰
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฐ ํด๋Ÿญ ์†๋„ ์ฆ๊ฐ€ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€