CPU ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ ๊ตฌํ
ํ๊ธฐ ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด(๋นํธ์ฝ๋)๋ก ๋ฐ๊ฟ CPU์ ์ง์ ์ ๋ฌํด์ ์คํ
(ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ ํ์๋ ์์)
0x0000b MOV R4, 0x00A0
0x0010b MOV R5, 0x0002
0x0020b LOAD R1, R4, R5
0x0030b ADD R2, R1, #4
0x0040b SUB R3, R1, R2
0x0050b STORE R3, R4, #4
์ฌ๋ฌ Instruction์ ๋ํ ์๊ตฌ์ฌํญ์ด ์์์ง๋ง, ์ผ๋จ LOAD ๋ช ๋ น์ด 1๊ฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ชฉํ
์ดํดํ๊ธฐ ๋ ์ด๋ ต๋ค...(์ด๋ ค์ฃผ์ธ์ ๐ฅ)
Instruction | 4bit | 3bit | 3bit | 3bit | 3bit | ์ค๋ช |
---|---|---|---|---|---|---|
LOAD | 0001 | dst.Reg | base.Reg | 000 | offset.Reg | (base. Reg + offset. Reg) ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ฝ์ด์ dst. Reg๋ก ๋ก๋ํ๋ค. |
(๊ฐ Register๋ 3bit๋ก R1๋ถํฐ R7๊น์ง ๋ช ์ํ ์ ์๋ค.)
[LOAD, R1, R2, R3] => [0001 001 010 000 011]
- ๊ธฐ๋ณธ ์ฒ๋ฆฌ ๋จ์ Word๋ 2๋ฐ์ดํธ ๊ธฐ์ค
- Register๋ PROGRAM-COUNT ์ญํ ์ ํ๋ PC, ๊ทธ ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ 7๊ฐ R1-R7 ๋ ์ง์คํฐ๋ฅผ ํฌํจ
- ALU๋ ๋ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๊ฐ A, B๋ฅผ ๊ณ์ฐํด์ ๋ชฉ์ ๋ ์ง์คํฐ์ ์ ์ฅ
- ALU ๊ณ์ฐ์๋ ADD ๋ง์ , SUB ๋บ์ ๊ณผ AND ๋ ผ๋ฆฌ๊ณฑ, OR ๋ ผ๋ฆฌํฉ ์ฐ์ฐ๋ง ์กด์ฌ
-
reset()
ํจ์๋ ๋ ์ง์คํฐ ๊ฐ์ ๋ชจ๋ ์ง์ฐ๊ณ , PC ๊ฐ๋ 0์ผ๋ก ์ด๊ธฐํ -
fetch()
ํจ์๋ ํ์ฌ PC ๊ฐ์ ํด๋นํ๋ ๋ฉ๋ชจ๋ฆฌ์์ ํ๋ก๊ทธ๋จ ๋ช ๋ น์ด๋ฅผ ๊ฐ์ ธ์์ ๋ฆฌํดํ๊ณ PC ์นด์ดํธ๋ฅผ +1 ์ฆ๊ฐ์ํด -
execute(Int16 IR)
ํจ์๋ ์ ๋ฌํ ๋ช ๋ น์ด๋ฅผ ์ด๋ค ๋ช ๋ น์ธ์ง ๋ถ์ํด์ ๊ณ์ฐํ๊ฑฐ๋ ์ฒ๋ฆฌ -
dump()
ํจ์๋ REGISTER๋ค ๊ฐ์ ๋ฐฐ์ด์ ๋ฃ์ด์ ๋ฆฌํด