kyj93790 / System-Programming

2021-1 System-Programming โœจ Make my own SHELL, ASSEMBLER, and LINK-LOADER ๐ŸŒฟ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

์ปดํŒŒ์ผ ๋ฐฉ๋ฒ• : shell์— make ์ž…๋ ฅ

  • testfiles์—์„œ ํ•„์š”ํ•œ ํŒŒ์ผ์€ ์ „๋ถ€ testfiles ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊บผ๋‚ธ ํ›„ ์‹คํ–‰ํ•ด์•ผ ํ•จ.

์‹คํ–‰ ๋ฐฉ๋ฒ• : shell์— ./20191574.out ์ž…๋ ฅ

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ํ™”๋ฉด์— sicsim> ์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ด๋Š” SIC/XE์˜ shell๊ณผ ๊ฐ™์€ ์—ญํ• ์ด๊ณ  ์ด ํ™”๋ฉด์— ์›ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

๋ช…๋ น์–ด ์‹คํ–‰

  • ๋ช…๋ น์–ด๋Š” ์†Œ๋ฌธ์ž๋งŒ ์ธ์‹์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ณต๋ฐฑํฌํ•จ 100์ž๋ฆฌ ์ด์ƒ์˜ ๋ช…๋ น์–ด๋Š” ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

/* Shell ๋ช…๋ น์–ด */

  1. h ๋˜๋Š” help ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค.
  2. d ๋˜๋Š” dir ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋””๋ ‰ํ„ฐ๋ฆฌ์ธ ๊ฒฝ์šฐ ํŒŒ์ผ๋ช… ์˜†์— '/', ์‹คํ–‰ํŒŒ์ผ์˜ ๊ฒฝ์šฐ '*'๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
  3. q ๋˜๋Š” quit ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  4. hi ๋˜๋Š” history shell์— ์ž…๋ ฅํ–ˆ๋˜ ๋ช…๋ น์–ด๋“ค์„ ์ž…๋ ฅ ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
  5. type filename filename ๋ถ€๋ถ„์—๋Š” ์ถœ๋ ฅ์„ ์›ํ•˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋„ฃ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. filename์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์„ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฝ์–ด ํ™”๋ฉด์— ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

/* Memory ๋ช…๋ น์–ด */

  1. du ๋˜๋Š” dump i) du[mp] ์ด์ „ ๊นŒ์ง€ ํ˜ธ์ถœํ–ˆ๋˜ dump๊ฐ€ ์ถœ๋ ฅํ•œ ์ดํ›„ ๋ฒˆ์ง€๋ถ€ํ„ฐ 160byte์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ฒ˜์Œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” 0๋ฒˆ์งธ ๋ฒˆ์ง€๋ถ€ํ„ฐ 160byte๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ii) du[mp] start ํ•ด๋‹น ์ธ์ž๋Š” 16์ง„์ˆ˜ ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. start ๋ฒˆ์ง€๋ถ€ํ„ฐ 160byte์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. iii) du[m] start, end ํ•ด๋‹น ์ธ์ž๋“ค์€ 16์ง„์ˆ˜ ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. start ๋ฒˆ์ง€๋ถ€ํ„ฐ end ๋ฒˆ์ง€์˜ ๋ฉ”๋ชจ๋ฆฌ๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค.
  2. e ๋˜๋Š” edit e[dit] address, value์˜ ๊ผด๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค. address, value ๋ชจ๋‘ 16์ง„์ˆ˜ ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ address ๋ฒˆ์ง€์˜ ๊ฐ’์„ value์— ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  3. f ๋˜๋Š” fill f[ill] start, end, value์˜ ๊ผด๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค. start, end, value ๋ชจ๋‘ 16์ง„์ˆ˜์˜ ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์˜ start ๋ฒˆ์ง€๋ถ€ํ„ฐ end๋ฒˆ์ง€๊นŒ์ง€์˜ ๊ฐ’์„ value์— ์ง€์ •๋œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  4. reset ๋ฉ”๋ชจ๋ฆฌ ์ „์ฒด๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

/* OPCODE ๋ช…๋ น์–ด */

  1. opcode mnemonic mnemonic์˜ ์ž๋ฆฌ์—๋Š” opcode๋ฅผ ์ฐพ๊ณ  ์‹ถ์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ex ) opcode ADD, opcode LDB ๋‹จ, mnemonic์€ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ ์ ˆํ•œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด์˜ opcode๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  2. opcodelist opcode Hash Table์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.

/* SIC/XE ์–ด์…ˆ๋ธ”๋Ÿฌ ๋ช…๋ น์–ด */

  1. assemble filename filename ๋ถ€๋ถ„์—๋Š” assembleํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์†Œ์Šค ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. filename์— ํ•ด๋‹นํ•˜๋Š” ์†Œ์Šค ํŒŒ์ผ์„ ์ฝ์–ด์„œ object ํŒŒ์ผ๊ณผ ๋ฆฌ์ŠคํŒ… ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค. [filename.obj, filename.lst] ์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ ๋‘ ๊ฐœ๊ฐ€ ๋งŒ๋“ค์–ด ์ง„๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ผ์ธ์„ ์ถœ๋ ฅํ•œ๋‹ค.

  2. symbol assemble ๊ณผ์ • ์ค‘์—์„œ ์ƒ์„ฑ๋œ symbol table์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ€์žฅ ์ตœ๊ทผ์— ์„ฑ๊ณต์ ์œผ๋กœ assemble๋œ ํŒŒ์ผ์˜ symbol table์„ ์•ŒํŒŒ๋ฒณ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

/* LOAD ๋ช…๋ น์–ด */

  1. progaddr address program์ด load ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ token์œผ๋กœ ๋„˜๊ฒจ progaddr์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰ ์‹œ ์ž๋™์œผ๋กœ 0x00์œผ๋กœ ์ง€์ •๋œ๋‹ค.

  2. loader filename1 [filename2] [filename3] filename์— ํ•ด๋‹นํ•˜๋Š” object file์„ ์ฝ์–ด linking ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— load ํ•œ๋‹ค. ํŒŒ์ผ์€ 3๊ฐœ๊นŒ์ง€ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค. load๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋๋‚˜๋ฉด load map์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ๋‹ค.

/* RUN ๋ช…๋ น์–ด */

  1. bp address address์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ๋ฅผ break point๋กœ ์ง€์ •ํ•œ๋‹ค. run์„ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ breakpoint๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ์ •์ง€ํ•œ๋‹ค. ๋‹ค์Œ run์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ •์ง€๋œ breakpoint๋ถ€ํ„ฐ ์ˆ˜ํ–‰๋œ๋‹ค. break point๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ ๋๊นŒ์ง€ ์ˆ˜ํ–‰๋œ๋‹ค.

  2. bp clear ์ง€์ •๋œ ๋ชจ๋“  break point๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  3. bp ์ง€์ •๋œ ๋ชจ๋“  break point๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

  4. run ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค. progaddr ๋ช…๋ น์–ด๋กœ ์ง€์ •๋œ ์ฃผ์†Œ๋ถ€ํ„ฐ ์‹คํ–‰๋œ๋‹ค. run์ด ์ •์ง€๋œ ์‹œ์ ์˜ register ๊ฐ’์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

About

2021-1 System-Programming โœจ Make my own SHELL, ASSEMBLER, and LINK-LOADER ๐ŸŒฟ


Languages

Language:C 97.6%Language:Assembly 1.8%Language:Makefile 0.6%