MIPS assembly programming
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. ์ฌ์ฉ์๋ ์ ์ ํน์ ์ค์๋ฅผ ์ญ์ง์ ํํ๋ก ์ ๋ ฅํ๋ค.
์1) Enter the number: 12345
์2) Enter the number: -293.1234
์ฌ์ฉ์๊ฐ ์ํฐ๋ฅผ ์น๋ฉด ์ต์ข ์ ์ผ๋ก๋ ํ๋ฉด์ ์ ๋ ฅ๋ ์์ ํด๋นํ๋ ์ด์ง์๋ฅผ ์ถ๋ ฅํ๋ค. ์ ๋ ฅ์ด ์ ์์ด๋ฉด integer word์ ์ด์ง์๋ฅผ ์ถ๋ ฅํ๊ณ ์ ๋ ฅ์ด floating point์ด๋ฉด 32-bit single precision floating point๋ก ํํ๋ ์ด์ง๋นํธ๋ฅผ ์ถ๋ ฅํ๋ค. ํ์ง๋ง ์ต์ข ๊ฒฐ๊ณผ ์ถ๋ ฅ ์ด์ ์ ๊ฐ ๋จ๊ณ๋ณ ์ค๊ฐ ๊ฒฐ๊ณผ๋ ์ถ๋ ฅํ๋ค. ๋จ๊ณ์ ๋ํ ์ค๋ช ์ ์๋๋ฅผ ์ฐธ๊ณ ํ๋ค.
์1) Enter the number: 12345
Input string: 12345
Integer number detected
Half of the input number: 6172
Binary number: 0000 0000 0000 0000 0011 0000 0011 1001
Hexa number: 00 00 30 39
์2) Enter the number: -293.1234
Input string: -293.1234
Floating point number detected
Half of the input number: -146.5617
Binary number: 1100 0011 1001 0010 1000 1111 1100 1100
Hexa number: C3 92 8F CC
์ฌ์ฉ์ ์ ๋ ฅ์ ์ ์์ธ ๊ฒฝ์ฐ word ํฌ๊ธฐ ์ด๋ด๋ก ํํ ๊ฐ๋ฅํ ์ซ์์ด๋ฉฐ FP์ธ ๊ฒฝ์ฐ 32 bit single precision ํํ๋ก ํํ ๊ฐ๋ฅํ ์ซ์๋ผ๊ณ ๊ฐ์ ํ๋ค. ์ถ๋ ฅ์ ์ด์ง์ฝ๋๋ ๋ฐ๋์ 4๋นํธ๋ง๋ค ์คํ์ด์ค๋ฅผ ์ถ๋ ฅํ๊ณ ํฅ์ฌ์ฝ๋๋ ๋์๋ฆฌ๋ง๋ค ์คํ์ด์ค๋ฅผ ์ถ๋ ฅํ๋ค.
์ฒจ๋ถ๋ MIPS emulator๋ฅผ ์ฌ์ฉํ๋ค. Jar ํ์ผ์ด๋ฏ๋ก ์๋์ฐ์ฆ ํ๊ฒฝ์์ ์๋ฐ๋ฅผ ์ค์นํํ ์คํํ๋ค. ์ฑ๊ณต์ ์ผ๋ก MIPS emulator๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฐฝ์ด ๋ฌ๋ค.
F3๋ ์์ค์ฝ๋๋ฅผ assembleํ๋ ๋จ์ถํค์ด๋ค. F5๋ ์คํํ๋ ๋จ์ถํค์ด๋ค. ์คํ๊ฒฐ๊ณผ๊ฐ ํ๋จ์ ์ฐฝ์ ์ถ๋ ฅ๋๋ฏ๋ก ์ฌ๊ธฐ์ ์ถ๋ ฅ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ ํ ์ ์๋ค. ์น์ ์๋ง์ tutorial ์๋ฃ๋ค์ด ์์ผ๋ฏ๋ก ๊ฒ์ํ๋ฉด ์ฝ๊ฒ ์๋ฃ๋ฅผ ์ฐพ์ ์๊ฐ ์๋ค.
๋ช ๊ฐ๋ฅผ ์ ์ด๋ณด๋ฉด:
https://courses.cs.vt.edu/cs2506/Fall2014/Notes/L04.MIPSAssemblyOverview.pdf http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm http://www.tfinley.net/notes/cps104/mips.html http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/slides/05-AssemblyProgramming.pdf http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/slides/07-MoreAssemblyProgramming.pdf http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/code/Hello.asm http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/code/Decls.asm http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/code/Add3.asm http://web.engr.oregonstate.edu/~walkiner/cs271-wi13/code/Parrot.asm https://www.cs.ucsb.edu/~franklin/64/lectures/mipsassemblytutorial.pdf
ํนํ, ์ฒซ๋ฒ์งธ ๋งํฌ์์์ hello world ์์ ๋ฅผ ๋ฐ๋ผ๊ฐ ๋ณด๋ฉด ์ฝ๊ฒ ์ฝ๋ฉ์ ์์ํ ์ ์๋ค.
๊ณผ์ ์ํ์ ํธ์๋ฅผ ์ํด ์๋์ ๊ฐ์ด ๋จ๊ณ๋ณ ์์๋๋ก ๊ตฌํํ๋ค๊ณ ์๊ฐํ๊ณ ์งํํ ๊ฒ.
-
1๋จ๊ณ: ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ๋ ๊ธฐ๋ฅ - ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ์๊ตฌํ๊ณ ๋ฐ์ ํ string์ผ๋ก ์ ์ฅํ๋ค. ์ ๋ ฅ์ ๋ฐ์ ๋์๋ "read string" syscall์ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ๊ฐ์ด ์ ์์ธ์ง FP์ธ์ง ๋ฏธ๋ฆฌ ์ ์ ์์ผ๋ฏ๋ก "read integer"๋ "read float"๋ ์ฌ์ฉํ ์๊ฐ ์๋ค.
-
2๋จ๊ณ: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์ ์์ธ์ง FP์ธ์ง ์ธ์
-
3๋จ๊ณ: ์ ๋ ฅ๋ ์ ๋ณํ ๊ธฐ๋ฅ - ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋ text๋ก ์ ์ฅ๋๋ฏ๋ก ์ด๋ฅผ ํด์ํ์ฌ word์ ์ ํน์ FPํํ์ ์๋ก ๋ณํํ๋ค. ์ฌ์ฉ์๊ฐ 123๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ ์ด๋ ๋จ์ํ character ASCII code ๋ฐฐ์ด '1', '2'์ '3'์ด๋ฏ๋ก ์ด๋ฅผ ํ๋์ฉ ์ฝ์ผ๋ฉด์ ํ๋์ register์์ ์ ์๊ฐ์ ๋ง๋ค์ด์ผ ํ๋ค. 1์ ๋จผ์ ์ ์ฅํ๊ณ , ๋๋ฒ์งธ '2'๋ฅผ ๋ณผ๋ 1์ x10ํ๊ณ 2๋ฅผ ๋ํ๊ณ , ๋ง์ง๋ง์ผ๋ก ์ธ๋ฒ์งธ '3'์ ๋ณด๋ฉด ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฐ์์ x10์ ํ๊ณ 3์ ๋ํ๋ค. ์ค์์ผ ๊ฒฝ์ฐ FP instruction์ ์ฌ์ฉํ์ฌ ๋น์ทํ ์์ ์ ํ๋ค.
-
4๋จ๊ณ: ์ด์ง ๋นํธ ์ถ๋ ฅ ๊ธฐ๋ฅ
-
5๋จ๊ณ: Hexa ์ฝ๋๋ก ์ถ๋ ฅ
๊ฐ ๋จ๊ณ์ ๋์์ ํ์ธํ๊ธฐ ์ํด ๋จ๊ณ๋ณ ๊ฒฐ๊ณผ๋ฅผ ์์์ ์ด๋ฏธ ๋ณด์ฌ์ค ์์์ ๊ฐ์ด ์ถ๋ ฅํ๋ค. ๋จ, 3๋จ๊ณ์ ๊ฒฐ๊ณผ๋ ์ ๋ ฅ๋ ๊ฐ์ 2๋ก ๋๋ ํ ์ถ๋ ฅํ๋ค.