- project1-Simple Calculator
๋ณธ ํ๋ก์ ํธ๋ ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ์ ISA(Instruction Set Architecture)์ ํ์ฉํ์ฌ ๊ฐ๋จํ ์ฌ์น ์ฐ์ฐ๊ณผ MIPS CPU์์ ์๋ instruction์ค Move, Compare, Jump, Branch ๋ฑ์ ์ง์ ๊ตฌํํ๊ณ ์ถ๋ ฅํ์ฌ ๋ณ์(๋ ์ง์คํฐ)์ ์ํ ๋ณํ๋ฅผ ๋ณผ ์ ์๋ ํ๋ก๊ทธ๋จ์ด๋ค. ๋ํ gcd.txtํ์ผ์ ์์ ์ ์ธํ instruction set์ ์ด์ฉํ์ฌ ๋ ์์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ ์ ์๋๋ก ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
- Instruction set์ .txtํ์ผ ์์ ๋ค์ด์๊ณ opcode operand1 operand2์ ๊ตฌ์กฐ๋ฅผ ๋๋ค(e.g : + 0x2 0x4 , M R0 0x1).
- ๊ฐ๊ฐ์ Instruction๋ค์ ๊ฐํ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
- instruction set์ด .txtํ์ผ ์์ ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ผ์ ์ฝ์ด์ค๋ fopen, fgets์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- operand์ 16์ง์ ํํ์ ๋ฌธ์์ด๋ก ๋ค์ด์ค๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ long type์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ strtolํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- Move(M) : ํด๋น ๋ ์ง์คํฐ(๋ณ์)์ ๊ฐ์ ๋์ ํ๋ instruction์ด๋ค. (e.g : M R0 0x1 -> R0 = 1)
- Compare(C) : operand1 ๊ณผ operand2์ ๊ฐ์ ๋น๊ตํ์ฌ operand1์ ๊ฐ์ด ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด R0๋ ์ง์คํฐ์ 1์, ์๋๋ผ๋ฉด 0์ ๋์ ํ๋ค. (e.g : C 0xa 0xc -> R0 = 0)
- Jump(J) : operand1์ ์ฐ์ฌ์๋ ์ฃผ์๋ก ๋์ด๊ฐ๋ค. (e.g : J 0x2 -> .txtํ์ผ์ 2๋ฒ์งธ ์ค๋ก ์ด๋)
- Branch(B) : R0๋ ์ง์คํฐ์ ์ํ๊ฐ 1์ด๋ผ๋ฉด operand1์ ์ฐ์ฌ์๋ ์ฃผ์๋ก Jumpํ๋ค. (e.g : M R0 0x1, B 0x7 -> .txtํ์ผ์ 7๋ฒ์งธ ์ค๋ก ์ด๋)
- gcd : ์ต๋๊ณต์ฝ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ๋ค. operand1๊ณผ operand2์ ์๋ ๊ฐ์ R1, R2๋ ์ง์คํฐ์ ์ ์ฅํ๋ค. (e.g : gcd 0x9 0x3 -> R1 = 9, R2 = 3)
- Same(S) : GCD๊ณ์ฐ์ ์ํด ๋ง๋ instruction์ผ๋ก operand1, operand2์ ๊ฐ์ด ๊ฐ๋ค๋ฉด R0๋ ์ง์คํฐ์ 1์, ๊ฐ์ง ์๋ค๋ฉด 0์ ๋์ ํ๋ค. (e.g : S 0x4 0x4 -> R0 = 1)
- Halt(H) : ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค. (e.g : H -> ํ๋ก๊ทธ๋จ ์ข ๋ฃ)
- ๊ฐ๋ฐํ๊ฒฝ : windows
- ์ฌ์ฉ ์ธ์ด : C