๊ณ„๋ž€์†Œ๋…„ 2023. 9. 22. 16:11

Fake Simple ์ปดํ“จํ„ฐ ๋ช…๋ น์–ด ์ง‘ํ•ฉ

- ์ดํ•ด๋ฅผ ์œ„ํ•œ ๋‹จ์ˆœํ•œ ๊ฐ€์ •,์˜ˆ์‹œ์ด๋‹ค.

 

๋ช…๋ น์–ด ํ˜•์‹ (๊ฐ€์ •)

16bits๋กœ ๊ตฌ์„ฑ

์—ฐ์‚ฐ๋ถ€ํ˜ธ๊ฐ€ 4bits ํ˜น์€ 16bits

1) 15๋ฒˆ bits๊ฐ€ 0์ด๋ฉด 12~15๋ฒˆ bit๊ฐ€ ์—ฐ์‚ฐ๋ถ€ํ˜ธ์ด๊ณ ,

2) 15๋ฒˆ bits๊ฐ€ 1์ด๋ฉด 0~15๋ฒˆ bit๊ฐ€ ์—ฐ์‚ฐ๋ถ€ํ˜ธ์ด๋‹ค.

๋ช…๋ น์–ด

LDA~CAL์€ ์—ฐ์‚ฐ๋ถ€ํ˜ธ๊ฐ€ 1~6์ธ๋ฐ ๊ฐ‘์ž๊ธฐ HLT๋ถ€ํ„ฐ๋Š” 8000์ด ๋œ๋‹ค. ์ด์œ ๋Š” 15๋ฒˆ ๋น„ํŠธ์— ์žˆ๋‹ค.

์•ž์—์„œ 15๋ฒˆ ๋น„ํŠธ๊ฐ€ 0์ด๋ฉด 12~15๋ฒˆ ๋น„ํŠธ๊ฐ€ ์—ฐ์‚ฐ๋ถ€ํ˜ธ์ด๊ณ , 15๋ฒˆ ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด 0~15๋ฒˆ ๋น„ํŠธ๊ฐ€ ์—ฐ์‚ฐ๋ถ€ํ˜ธ๋ผ๊ณ  ํ•˜์˜€๋‹ค.

1(16)์—์„œ 1์€ 0001(2) ์ฆ‰ 15๋ฒˆ ๋น„ํŠธ๊ฐ€ 0์ด๊ณ , 8000(16)์—์„œ 8์€ 1000(2) ์ฆ‰, 15๋ฒˆ ๋น„ํŠธ๊ฐ€ 1์ด๋‹ค.

1(16) = 0000/0000/0000/0001(2)

8000(16) = 1000/0000/0000/0000(2)

 

๋ฐ์ดํ„ฐ ํ˜•์‹ (๊ฐ€์ •)

16 bits๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์ •์ˆ˜๋งŒ ์ทจ๊ธ‰

15๋ฒˆ bit๋Š” ๋ถ€ํ˜ธ๋ฅผ ์˜๋ฏธ, 0~14๋ฒˆ bit๋Š” ์ •์ˆ˜ ํฌ๊ธฐ ์˜๋ฏธ

15๋ฒˆ bit๊ฐ€ 0: ์–‘์ˆ˜, 1: ์Œ์ˆ˜

 

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๊ฐ€์ •ํ•ด๋ณด์ž : ()๋Š” ์ง„๋ฒ•

๊ทธ๋ฆผ ์„ค๋ช…: ์™ผ์ชฝ 0100,0102๋Š” ์ฃผ์†Œ๋กœ 2์”ฉ ์ฆ๊ฐ€ํ•˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” 1500์€ 16bit=2Byte์ด๋ฏ€๋กœ 2์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๊ฐ€์ •ํ•˜๊ฒ ๋‹ค.

๋ช…๋ น์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ {0100(16)= 0000/0001/0000/0000(2)}๋ฒˆ์ง€๋ถ€ํ„ฐ ์‹œ์ž‘
๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ 0500(16)๋ฒˆ์ง€์™€ 0502(16)๋ฒˆ์ง€์— ์ˆซ์ž 0001(16), 0002(16)์ด ์ €์žฅ

๋ฉ”๋ชจ๋ฆฌ์— 1500,3502,2502,5300์€ ๋ช…๋ น์–ด์ด๊ณ , ๋ฐ‘์— 0001,0002๋Š” ์ •์ˆ˜ data, 100,102๋Š” ์ฃผ์†Œ์ด๋‹ค.

 
์ด๋Ÿฐ ์ผ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
๋ฉ”๋ชจ๋ฆฌ 0500(16)๋ฒˆ์ง€์™€ 0502(16)๋ฒˆ์ง€ ์ˆซ์ž๋ฅผ ๋”ํ•ด 0502(16)๋ฒˆ์ง€์— ์ €์žฅํ•˜๊ณ , 0300(16)๋ฒˆ์ง€ ๋ช…๋ น์–ด๋กœ ๋ถ„๊ธฐํ•˜๋ผ

๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด

M[502] <- M[500] + M[502]

PC <-300
๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ช…๋ น์–ด(16์ง„๋ฒ•) ๊ธฐ๊ณ„์–ด(16์ง„๋ฒ•)
0100 LDA 500 1500
0102 ADD 502 3502
0104 STA 502 2502
0106 JMP 300 5300

 

 

1. LDA์—ฐ์‚ฐ ๋ถ€ํ˜ธ 1 + ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 500 : 1500

์ด ์‹œ์ ์— 500๋ฒˆ์ง€ ๋ฐ์ดํ„ฐ 1์ด  accumulator register์— ๋กœ๋“œ๋จ.

2.  ADD์—ฐ์‚ฐ ๋ถ€ํ˜ธ 3 + ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 502: 3502

3. STA์—ฐ์‚ฐ ๋ถ€ํ˜ธ 2 + ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 502: 2502

4. JMP์—ฐ์‚ฐ ๋ถ€ํ˜ธ 5 + ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 300: 5300

๊ฒฐ๊ณผ

๊ธฐ๋ณธ์ ์ธ ์ˆœ์„œ๋Š” 3๊ฐ€์ง€๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1. ์ฃผ์†Œ๊ฐ’ PC๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ IR์—  ๋„ฃ๋Š”๋‹ค.

2. ๊ทธ๋ฆฌ๊ณ  PC๋Š” 2๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ (=๋‹ค์Œ๋ช…๋ น์–ด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ),  IR์—์„œ ์˜คํ”ผ์ฝ”๋“œ๋ฅผ ๋””์ฝ”๋”ฉํ•œ๋‹ค.

3. ๋ช…๋ น์–ด(opcode)์— ๋งž์ถฐ ์‹คํ–‰ํ•œ๋‹ค.

์ด์ œ 100๋ฒˆ์ง€์— ์žˆ๋Š” 1500์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž  

 

1. LDA 500

1)PC <- 0100 : PC์— 0100์ด ๋“ค์–ด๊ฐ„๋‹ค.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ๊ฐ€ PC์— ๋“ค์–ด๊ฐ„๋‹ค.

2) MAR <- PC; MBR <-M[MAR]; IR <- MBR

CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ ค๋ฉด MAR(์ฃผ์†Œ),MBR(๋ฐ์ดํ„ฐ)์ด ํ•„์š”ํ•˜๋‹ค.

1. CPU๊ฐ€ ์–ด๋–ค ์ฃผ์†Œ์— ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ์ง€ MAR์— ๋ฌผ์Œ. 

2. ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ํ•ด๋‹น MAR์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ MBR์— ์ ์Œ.

3. IR์— MBR์˜ ๋ช…๋ น์–ด๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด

MAR์— PC์˜ ๊ฐ’์„ ์ค€๋‹ค.  Memory์˜ MAR์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ MBR์— ์ ์–ด์ค€๋‹ค. IR์•ˆ์— MBR์„ ๊ฑฐ์ณ ๋“ค์–ด์˜จ๋‹ค.

์ฆ‰, 0100์•ˆ์— ์žˆ๋˜ 1500 ๋ฐ์ดํ„ฐ๊ฐ€ IR์— ๋“ค์–ด์˜จ๋‹ค.

fetchํ•œ๊ฒƒ(์ธ์ถœ ์‚ฌ์ดํด)

3) PC <- PC +2; decode IR[15:12]

IR์— 15๋น„ํŠธ๋ถ€ํ„ฐ 12๋น„ํŠธ ๊นŒ์ง€ opcode๋ฅผ decodeํ•˜๊ณ , pc๋Š” ๋‹ค์Œ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 1,2๋ฒˆ ๊ณผ์ •์ค‘์—์„œ๋Š” pc๊ฐ€ ํ˜„์žฌ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ณ , ์ด์ œ์„œ์•ผ ๋‹ค์Œ์ฃผ์†Œ์ธ 0102๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.  ALU์—์„œ ๋ช…๋ น์–ด ๊ธธ์ด 2๋งŒํผ ๋”ํ•ด์„œ ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๊ฐ’์„ ์ฃผ๊ณ  ๊ทธ๊ฒƒ์„ pc์— ์ €์žฅํ•œ๋‹ค.

ํ˜„์žฌ: IR์˜ opcdoe๋ฅผ ํ•ด๋…ํ•œ ์ƒํƒœ, pc ํ•˜๋‚˜ ์ฆ๊ฐ€ํ•œ ์ƒํƒœ

4) MAR <- IR[11:0]; MBR <-M[MAR]; Acc<-MBR

MAR: ์–ด๋А ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€. IR์˜ 11๋น„ํŠธ๋ถ€ํ„ฐ 0๋น„ํŠธ๊นŒ์ง€ ์ฆ‰, 0500์„ ๊ฐ€์ง€๊ณ ์žˆ์Œ.

0500์ฃผ์†Œ์— ์žˆ๋Š” 0001์„ MBR๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

MBR์— ์žˆ๋Š” ๊ฐ’(0001)์„ Acc์— ๋„ฃ๋Š”๋‹ค.

 

2.ADD 502

(1) MAR ← PC; MBR ← M[MAR]; IR ← MBR   ( = IR ← M[PC]; )
(2) PC ← PC + 2; decode IR[15:12]

(3) Acc ← Acc + M[IR[11:0]]

Acc์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ 502์ฃผ์†Œ์—  ์žˆ๋Š” 0002๋ฅผ ๋”ํ•ด์„œ  Acc์— ๋„ฃ๋Š”๋‹ค.

3.STA 502

(1) MAR ← PC; MBR ← M[MAR]; IR ← MBR

      ( = IR ← M[PC]; )

(2) PC ← PC + 2; decode IR[15:12]

(3) M[IR[11:0]] ← Acc

Acc์— ์žˆ๋Š” ๊ฐ’ 0003์„ 502์ฃผ์†Œ๊ฐ’์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

 

4.JMP 300

(1) MAR ← PC; MBR ← M[MAR]; IR ← MBR

      ( = IR ← M[PC]; )

(2) PC ← PC + 2; decode IR[15:12]

(3) PC ← IR[11:0]

์ˆ˜ํ–‰ํ•ด์•ผํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ๊ฐ’์€ 108์ด ์•„๋‹ˆ๋ผ  300 (=IR[11:0]). ๋”ฐ๋ผ์„œ PC๊ฐ’์ด 0108 ->0300์œผ๋กœ ๋ณ€๊ฒฝ

106->๋ฐ”๋กœ 300์œผ๋กœ ๊ฐ€๋Š”๊ฒŒ ๋ถˆํŽธํ•˜์ง€ ์•Š์ง€๋งŒ, ์›๋ž˜๋Š” ์ž๋™์œผ๋กœ 2๋งŒํผ ์ฆ๊ฐ€ํ•œ ์œ„์น˜๋กœ ์ด๋™ํ–ˆ๊ธฐ์—, ์ด ๊ทœ์น™์„ ๊นจ๋Š”๊ฒƒ์ด ๋” ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

์กฐ๊ฑด๋ถ„๊ธฐ ๋ช…๋ น์–ด

JMP๋Š” ๋ฌด์กฐ๊ฑด ๋ถ„๊ธฐ! ๊ทธ๋Ÿผ ์กฐ๊ฑด๋ถ„๊ธฐ๋Š”?

 

์กฐ๊ฑด ์ƒ์„ฑ, ๋น„๊ต ๋ช…๋ น๊ณผ ๋ถ„๊ธฐ ๋ช…๋ น

๋น„๊ต์™€ ๋ถ„๊ธฐ์ž‘์—…์„ ํ•˜๋‚˜๋กœ ์œตํ•ฉํ•œ ๋ช…๋ น์–ด ๊ตฌ์กฐ๋„ ์žˆ๋Š”๋ฐ, ๋น„๊ต- ์‚ฐ์ˆ  ๋…ผ๋ฆฌ ์—ฐ์‚ฐ - ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋ถ„๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. flag ๋ ˆ์ง€์Šคํ„ฐ

flag๋Š” ๊นƒ๋ฐœ!! ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜

flag๋Š” ์ƒํƒœ(status)๋ ˆ์ง€์Šคํ„ฐ/๋น„ํŠธ ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์€ 2 bits๋ฅผ ์‚ฌ์šฉํ•ด์„œ word๋‹จ์œ„์ด์ง€๋งŒ, flag ๋ ˆ์ง€์Šคํ„ฐ๋Š” 1bit๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋น„ํŠธ๋‹จ์œ„์ด๋‹ค.

4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์˜ฌ๋ฆผ์ˆ˜(Carry) - ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์—  ์˜ฌ๋ฆผ์ˆ˜ ์žˆ์œผ๋ฉด 1, ์—†์œผ๋ฉด 0

์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(Overflow) - ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด 1, ์—†์œผ๋ฉด 0

๋ถ€ํ˜ธ/์Œ์ˆ˜(Sign/Negative) - ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜๋ฉด  1,  ์–‘์ˆ˜๋‚˜ 0์ด๋ฉด 0

์˜(Zero) - ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ฉด 1,  0์ด ์•„๋‹ˆ๋ฉด 0

 

์ด๋ฒˆ์—” ํ”„๋กœ์‹œ์ €์˜ ํ˜ธ์ถœ๊ณผ ๋ณต๊ท€ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. 

proc: ํ”„๋กœ์‹œ์ € ์ด๋ฆ„, ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พผ ํ›„ ํ”„๋กœ์‹œ์ € ์‹œ์ž‘์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

cal proc: PC๋ฐ”๊ฟ”์ฃผ๋Š”๊ฒƒ

์ธ์ถœ์‚ฌ์ดํด: IR <-M[PC]; PC <-  PC+ ๋ช…๋ น์–ด ๊ธธ์ด (์ธ์ถœ์‚ฌ์ดํด์€ ๋ช…๋ น์–ด๋งˆ๋‹ค ํ•ญ์ƒ ๊ฐ™๋‹ค)

์‹คํ–‰ ์‚ฌ์ดํด: TOS( Top Of Stack) <-PC; PC<-proc (๋ช…๋ น์–ด๋งˆ๋‹ค ๋‹ฌ๋ผ์ง)

์‹คํ–‰์‚ฌ์ดํด์—์„œ, ๋ณต๊ท€ ํ›„ ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ(๋ณต๊ท€์ฃผ์†Œ)๋ฅผ TOS์— ์ €์žฅํ•œ๋‹ค.

๋ณต๊ธฐ์ฃผ์†Œ ์ €์žฅ ํ›„ PC๋Š” proc ์‹œ์ž‘์ฃผ์†Œ๋ฅผ ๊ฐ–๊ธฐ์— ์ดํ›„๋ถ€ํ„ฐ๋Š” ํ”„๋กœ์‹œ์ € proc์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ธ์ถœํ•œ๋‹ค.

๋ณต๊ธฐ์ฃผ์†Œ ์ €์žฅ์‹œ, stack์ด ์•„๋‹Œ ๊ทธ๋ƒฅ register์— ์ €์žฅํ•œ๋‹ค๋ฉด?

 

ret: (return) proc ํ”„๋กœ์‹œ์ € ์ข…๋ฃŒ ํ›„ ํ˜ธ์ถœ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณต๊ท€ํ•œ๋‹ค.

์ธ์ถœ์‚ฌ์ดํด: IR <-M[PC]; PC <-  PC + ๋ช…๋ น์–ด ๊ธธ์ด (์ธ์ถœ์‚ฌ์ดํด์€ ํ•ญ์ƒ ๊ฐ™๋‹ค)

์‹คํ–‰ ์‚ฌ์ดํด: PC<-TOS

์‹คํ–‰์‚ฌ์ดํด์—์„œ TOS์˜ ๋‚ด์šฉ(๋ณต๊ท€์ฃผ์†Œ)๋ฅผ PC๋กœ ์ €์žฅํ•œ๋‹ค.

*cal, ret๋Š” ๊ฐ€์ƒ ๋ช…๋ น์–ด์ด๋‹ค.

 

ํ”„๋กœ์‹œ์ €์˜ ํ˜ธ์ถœ/๋ณต๊ท€ ๊ณผ์ •์€ ์ค‘์š”ํ•˜๋‹ค.

๋ณต๊ท€์ฃผ์†Œ๋Š” TOS์— ์ €์žฅํ•œ๋‹ค!!!

์™œ Top Of Stack, ํ•˜ํ•„ stack์— ์ €์žฅํ• ๊นŒ?

stack์€ ์„ ์ž…ํ›„์ถœ ๊ตฌ์กฐ์ด๋‹ค. 

์Šคํƒ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํ•˜์ž.

a๋ฅผ ์ €์žฅํ•œ ๊ณณ์ด ์–ด๋”˜์ง€ ์•Œ์•„์•ผํ•œ๋‹ค. ์ฆ‰, a๊ฐ’๊ณผ a์ €์žฅ ์ฃผ์†Œ ๋ชจ๋‘ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๋˜ํ•œ ์—ฌ๋Ÿฌ๋ฒˆ function call ํ•˜๋ฉด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์ œํ•œ์— ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. '๊ณ„์† ์–ด๋””์— ๋ญ˜ ์ €์žฅํ•œ๋‹ค'๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผํ•œ๋‹ค.

์Šคํƒ์€ ์ˆœ์„œ๊ฐ€ ์ผ์ •ํ•˜๊ฒŒ ์Œ“์ž„. ๊ฐ€์žฅ ์œ„์—๊ฑฐ๊ฐ€ ์ตœ์‹  ์ฝœ์ด๋‹ค. 

 

310์ด๋ผ๋Š” ์ฃผ์†Œ๋ฅผ PC๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ๋•Œ ๋ช…๋ น์–ด๊ฐ€ cal proc1์ด๋ฉด cal proc1 ํ˜ธ์ถœ ํ›„ TOS์— ๋‹ค์Œ ์ฃผ์†Œ์ธ 312๊ฐ€ ์Œ“์ธ๋‹ค.

16bit ์ฆ‰, 2Byte์ด๋ฏ€๋กœ 2์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์ƒํƒœ

๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ

์ฃผ์†Œ ๋ช…๋ น์–ด
300 .
. .
. .
310 cal proc1
312 .
. .

ํ”„๋กœ์‹œ์ € proc1

์ฃผ์†Œ ๋ช…๋ น์–ด
400 .
. .
. .
430 cal proc2
. .
. .
460 cal proc2
. .
. ret

ํ”„๋กœ์‹œ์ € proc2

์ฃผ์†Œ ๋ช…๋ น์–ด
500 .
. .
. .
. ret

1. ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋žจ์˜ 310์ฃผ์†Œ์—์„œ cal proc1ํ•˜๋ฉด stack์—๋Š” ๋‹ค์Œ์ฃผ์†Œ์ธ 312๊ฐ€ ์Œ“์ด๊ณ , proc1์˜ ์‹œ์ž‘์ธ 400์œผ๋กœ ๊ฐ„๋‹ค.

๊ทธํ›„ 430์ฃผ์†Œ์—์„œ cal proc2ํ•˜๋ฉด stack์—๋Š” 312์œ„์— ๋‹ค์Œ์ฃผ์†Œ์ธ 432๊ฐ€ ์Œ“์ด๊ณ , proc2์˜ ์‹œ์ž‘์ธ 500์œผ๋กœ ๊ฐ„๋‹ค.

์ฒซ๋ฒˆ์งธ proc2 ๋ณต๊ท€ ํ›„์—๋Š” ์Šคํƒ์˜ 432๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉฐ, ๋ณต๊ท€์ฃผ์†Œ์ธ 432๋กœ ๊ฐ„๋‹ค.

460์ฃผ์†Œ์—์„œ cal proc2ํ•˜๋ฉด 312์œ„์— ๋‹ค์Œ์ฃผ์†Œ์ธ 462๊ฐ€ ์Œ“์ด๊ณ , proc2์˜ ์‹œ์ž‘์ธ 500์œผ๋กœ ๊ฐ„๋‹ค.

๋‘๋ฒˆ์งธ proc2 ๋ณต๊ท€ ํ›„์—๋Š” ์Šคํƒ์˜ 462๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉฐ, ๋ณต๊ท€์ฃผ์†Œ์ธ 462๋กœ ๊ฐ„๋‹ค.

์ฒซ๋ฒˆ์งธ proc1 ๋ณต๊ท€ ํ›„์—๋Š” ์Šคํƒ์˜ 312๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉฐ, ๋ณต๊ท€์ฃผ์†Œ์ธ 312๋กœ ๊ฐ„๋‹ค.

 

์™œ CPU ์•ˆ์— ๊ธฐ์–ต์žฅ์น˜(Register)๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

ํฐ๋…ธ์ด๋จผ ๋ชจ๋ธ์—์„œ data traffic์„ ๋ด๋ณด์ž.

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

ํฐ ๋…ธ์ด๋จผ ๋ชจ๋ธ์—์„œ ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ ์ถ”์ •

 

์‹œ์Šคํ…œ์€ ์•„๋ž˜ ์กฐ๊ฑด ๋”ฐ๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ๋‹ค. CPU์— ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์—†๋‹ค๋ฉด

์•„๋ž˜๋Š” ๊ธฐ์–ต์žฅ์น˜ ์—†๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ง„ํ–‰

๋ช…๋ น์–ด ๋ฐ์ดํ„ฐ: ์—ฐ์‚ฐ ๋ถ€ํ˜ธ ํฌ๊ธฐ๋Š” 1๋ฐ”์ดํŠธ, ์—ฐ์‚ฐ๋งˆ๋‹ค ์ตœ๋Œ€ 2๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ, ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” 2๋ฐ”์ดํŠธ,

์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ: ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋Š” 4๋ฐ”์ดํŠธ

  ๋ช…๋ น์–ด ์˜๋ฏธ
y = a mov y. a y<-M[a]
y = ax mul  y. x y<-M[a]*M[x]
y = ax*x mul  y. x y<-m[a]*M[x]์˜ ์ œ๊ณฑ
t = b mov t. b t<-M[b]
t = bx mul  t. x t<-M[b]*M[x]
y = y +t add y. t y<-m[a]*M[x]์˜ ์ œ๊ณฑ + M[b]*M[x]
y = ax*x + bx +c add y. c y<-m[a]*M[x]์˜ ์ œ๊ณฑ+ M[b]*M[x] +M[c]

๋ช…๋ น์–ด ์ธ์ถœ ํŠธ๋ž˜ํ”ฝ

ํ•œ ๋ช…๋ น์–ด๋‹น 5๋ฐ”์ดํŠธ * 7๊ฐœ ๋ช…๋ น์–ด

 

๋ฐ์ดํ„ฐ ์ด๋™ ํŠธ๋ž˜ํ”ฝ(1)

๋ฐ์ดํ„ฐ ์ด๋™ ์—ฐ์‚ฐ : mov y, a

a๋ฒˆ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ CPU๋กœ ๊ฐ–๊ณ  ์™”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ y๋ฒˆ์ง€๋กœ ์ €์žฅ

ํ•œ mov ๋ช…๋ น์–ด๋‹น 2ํšŒ ์ด๋™ * 4๋ฐ”์ดํŠธ = 8๋ฐ”์ดํŠธ

Subtotal_move = (ํ•œ mov ๋ช…๋ น์–ด๋‹น 2ํšŒ ์ด๋™ * 4๋ฐ”์ดํŠธ) * 2๊ฐœ์˜ mov ๋ช…๋ น์–ด(mov y,a / mov t,b) = ์ด 16๋ฐ”์ดํŠธ

 

๋ฐ์ดํ„ฐ ์ด๋™ ํŠธ๋ž˜ํ”ฝ(2)

์‚ฐ์ˆ ์—ฐ์‚ฐ mul,add: mul y,x

์‚ฐ์ˆ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํŠธ๋ž˜ํ”ฝ์ด ์—†๋‹ค.

y๋ฒˆ์ง€์™€ x๋ฒˆ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๊ฐ–๊ณ  ์™€ ๊ณฑ์…ˆ ์ˆ˜ํ–‰ ํ›„, ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ y๋ฒˆ์ง€์— ์ €์žฅ

ํ•œ mul ๋ช…๋ น์–ด๋‹น(2๊ฐœ ๋ฐ์ดํ„ฐ * 4๋ฐ”์ดํŠธ + 1๊ฐœ ๊ฒฐ๊ณผ๋ฐ์ดํ„ฐ * 4๋ฐ”์ดํŠธ) = 3*4๋ฐ”์ดํŠธ

mul๊ณผ add์—ฐ์‚ฐ์‹œ ํŠธ๋ž˜ํ”ฝ์–‘ ๋™์ผํ•˜๋ฏ€๋กœ, subtotal_mul/add = ๋ช…๋ น์–ด๋‹น 3*4๋ฐ”์ดํŠธ *5๊ฐœ mul/add ๋ช…๋ น์–ด

 

์ด 111๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ

๋ช…๋ น์–ด ์ธ์ถœ 35 Bytes + ๋ฐ์ดํ„ฐ ์ „์†ก 76 Bytes

 

 

CPU์— ๊ธฐ์–ต์žฅ์น˜๊ฐ€ ์žˆ๋‹ค๋ฉด

๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ

  • ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ CPU ๋‚ด๋ถ€์˜ ๊ธฐ์–ต์žฅ์น˜์— ๋ณด๊ด€
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•  ํ•„์š”์„ฑ ์ œ๊ฑฐ
  • ์˜ˆ์‹œ: ์ด๋ฏธ 2๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ x๋ฅผ Memory์—์„œ ๊ฐ–๊ณ  ์™”๊ธฐ ๋•Œ๋ฌธ์—, 3๋ฒˆ์งธ ์ฝ”๋“œ์—์„œ x๋ฅผ Memory์—์„œ ๋˜ ๊ฐ–๊ณ  ์˜ฌ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๋ช…๋ น์–ด ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธด ์ฃผ์†Œ ๋Œ€์‹ ์— ์†Œ๊ทœ๋ชจ ๊ธฐ์–ต์žฅ์น˜(๋ ˆ์ง€์Šคํ„ฐ)์˜ ์งง์€ ์ฃผ์†Œ ์‚ฌ์šฉ
  •  ๋ ˆ์ง€์Šคํ„ฐ ๊ฐœ์ˆ˜ = ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ bit ์ˆ˜
  • ๋ ˆ์ง€์Šคํ„ฐ ๊ฐœ์ˆ˜ << ๋ฉ”๋ชจ๋ฆฌ entry ์ˆ˜
  • ํ”ผ์—ฐ์‚ฐ์ž ํ•„๋“œ๊ฐ€ ์งง์•„์ง€๋ฉด ๋ช…๋ น์–ด์˜ ๊ธธ์ด๊ฐ€ ์ถ•์†Œ