Giter Club home page Giter Club logo

two-pass-sic-assembler's Introduction

Two-pass-SIC-Assembler

SIC Assembler on Linux๐ŸŒฑ

1. Design Issue

1) ์–ด์…ˆ๋ธ”๋Ÿฌ์˜ ์•„ํ‚คํ…์ณ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

Two-pass SIC Asssembler

๐Ÿ‘‰pass 1(SYMBOL ์ •์˜)

  • ํ”„๋กœ๊ทธ๋žจ๋‚ด์˜ ๋ชจ๋“  ๋ฌธ์— ์ฃผ์†Œ๋ฅผ ๋ฐฐ์ •ํ•œ๋‹ค.(LOCCTR)
  • ํŒจ์Šค 2์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๋ ˆ์ด๋ธ”์— ๋ฐฐ์ •๋œ ์ฃผ์†Œ ๊ฐ’๋“ค์„ ์ €์žฅํ•œ๋‹ค.(SYMTAB)
  • ์–ด์…ˆ๋ธ”๋Ÿฌ ์ง€์‹œ์ž๋“ค์— ๊ด€๋ จ๋œ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ํ–‰ํ•œ๋‹ค.(BYTE, RESW ๋“ฑ์— ์˜ํ•˜ ์—ฌ ์ •์˜๋˜๋Š” ๋ฐ์ดํƒ€ ์˜์—ญ์˜ ๊ธธ์ด ๊ฒฐ์ •๊ณผ ๊ฐ™์€ ์ฃผ์†Œ๋ฐฐ์ •์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จ ํ•œ๋‹ค.:ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌ)

๐Ÿ‘‰pass 2(๋ช…๋ น์–ด๋ฅผ ๋ฒˆ์—ญํ•˜๊ณ  ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ)

  • ๋ช…๋ น์–ด๋ฅผ ์–ด์…ˆ๋ธ”ํ•œ๋‹ค.(์—ฐ์‚ฐ์ž ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๊ณ  ์ฃผ์†Œ๋ฅผ ์กฐ์‚ฌ ํ•จ.:OPTAB,SYMTABํƒ์ƒ‰)
  • BYTE, WORD ๋“ฑ์œผ๋กœ ์ •์˜๋˜๋Š” ๋ฐ์ดํƒ€ ๊ฐ’์„ ์ƒ์„ฑํ•œ๋‹ค.(pass2์˜ ์ง€์‹œ์ž ์ฒ˜๋ฆฌ ์‹œ ์ƒ์„ฑ)
  • ํŒจ์Šค 1๋™์•ˆ์— ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ ์ง€์‹œ์ž์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.(ํ•จ์ˆ˜์ฒ˜๋ฆฌ-if๋ฌธ ์‚ฌ ์šฉํ•˜์—ฌ ์ง€์‹œ์ž๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์ฒ˜๋ฆฌ)
  • ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ๊ณผ ์–ด์…ˆ๋ธ”๋Ÿฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

2) Micro-Instruction Set Table์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

  • SYMTAB: ๋ฐฐ์—ด ๊ตฌ์กฐ์ฒด
  • LOCCTR: ๋ฐฐ์—ด ๊ตฌ์กฐ์ฒด
  • OPTAB: ๋ฐฐ์—ด ๊ตฌ์กฐ์ฒด

3) Micro-Instruction Set Table์˜ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฒฐ์ •ํ•œ๋‹ค.

  • OPTAB ํƒ์ƒ‰: ์ˆœ์ฐจ ํƒ์ƒ‰(for๋ฌธ,while ์ด์šฉ)
  • SYMTAB ํƒ์ƒ‰: ์ˆœ์ฐจ ํƒ์ƒ‰(๋‹จ, ์–ด๋“œ๋ ˆ์‹ฑ ๋ชจ๋“œ๋กœ โ€œX"๊ฐ€ ๋ถ™์—ˆ์„๊ฒฝ์šฐ โ€X"๋ฅผ ์ง€์šด๋‹ค.)

4) ์–ด์…ˆ๋ธ”๋ฆฌ์–ธ์–ด์ƒ์˜ Addressing Mode ํ‘œ๊ธฐ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•œ๋‹ค.

  • ์ธ๋ฑ์Šค ์ฃผ์†Œ์ง€์ • ๋ฐฉ์‹-ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ X: ๋ชจ๋“  ์ฃผ์†Œ์ฒ˜๋ฆฌ๋ฅผ ์ •์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๊ณ„์‚ฐ
  • ์ง์ ‘์ฃผ์†Œ์ง€์ • ๋ฐฉ์‹

5) ์–ด์…ˆ๋ธ”๋ฆฌ์–ธ์–ด์ƒ์˜ Directive ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•œ๋‹ค.

pass1์—์„œ ์ง€์‹œ์ž๋ฅผ ํ™•์ธํ•˜์—ฌ ์ฃผ์†Œ๋ฐฐ์ • ํ›„ ์ง€์‹œ์ž ๋ชจ๋‘ ์ฒ˜๋ฆฌ. BYTE๋Š” Type์ด C ์ผ ๊ฒฝ์šฐ์™€ X์ผ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ชฉ์ ์ฝ”๋“œ ์ƒ์„ฑ, WORD๋Š” 10์ง„์ˆ˜๋ฅผ 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ ํ›„ ๋ชฉ์ ์ฝ”๋“œ ์ƒ์„ฑ, RESB์™€ RESW๋Š” ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์—†์ด ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์•ฝ.

6) ์–ด์…ˆ๋ธ”๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ตœ์ข… ์‚ฐ์ถœ๋ฌผ์ธ ํ”„๋กœ๊ทธ๋žจ Object Program์˜ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๋ชฉ์  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ํ›„, ๋ชฉ์ ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ ํ•จ์ˆ˜์— H๋ ˆ์ฝ”๋“œ, T๋ ˆ์ฝ” ํŠธ, E๋ ˆ์ฝ”๋“œ ์ฐจ๋ก€๋Œ€๋กœ ์ƒ์„ฑํ•œ๋‹ค.

2. data flow diagram

12

3. functions

void pass1(FILE*fp,LINES*Lines,OPTAB*Optab,OBJECT*Object,SYMTAB*Symtab,LOCTAB*Loctab);
//Tokenizing, check_lines, Locctr ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
void pass2(LINES*Lines,OBJECT*Object,SYMTAB*Symtab,LOCTAB*Loctab);
//check_address,mkObjectcode,mkObjectprogram ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
void Tokenizing(FILE *fp,LINES *Lines);
//์–ด์…ˆ๋ธ”๋Ÿฌ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ์–ด ํ•œ ์ค„ ๋‹น ๋‘๊ฐœ ํ˜น์€ ์„ธ๊ฐœ์˜ ํ† ํฐ์„ 			
//Line[์ค„].token1,Line[์ค„].token2,Line[์ค„].token3์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
void check_lines(LINES *Lines,OPTAB *Optab,OBJECT *Object,SYMTAB*Symtab);
//1)Lines๋งˆ๋‹ค ํ† ํฐ๋“ค์„ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค. 
//2)์–ด๋–ค i๋ฒˆ์งธ ์ค„์˜ ํ† ํฐ์ด Optab[j].name๊ณผ ๊ฐ™๋‹ค๋ฉด Object[i].opcode์— Optab[j].opcode๋ฅผ ์ €์žฅํ•˜๊ณ , 
//3)๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ์ง€์‹œ์–ด์ธ์ง€ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ง€์‹œ์–ด๋ผ๋ฉด ์ง€์‹œ์–ด๋Œ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ Loctab.[i].Loc_countLines์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, BYTE๊ฑฐ๋‚˜ WORD๋ผ๋ฉด OPCODE๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 
//4)์–ด๋–ค ํ† ํฐ์ด ๋ช…๋ น์–ด, ์ง€์‹œ์–ด ๋‘˜ ๋‹ค ์•„๋‹ˆ๋ผ๋ฉด , Symtab.Label์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
void Locctr(LINES *Lines,LOCTAB *Loctab);
//์–ด๋–ค i๋ฒˆ์งธ ์ค„์ด๋ผ๋ฉด, 								
//Loctab[i].Loc=Loctab[i-1]+Loctab[i-1].Loc_count์ž…๋‹ˆ๋‹ค.(๋‹จ, ๊ฐ ์ง€์‹œ์ž๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌํฌ๊ธฐ(Loctab[i].Loc_count) ์ฒ˜๋ฆฌ๋Š” check_linesํ•จ์ˆ˜์—์„œ ์ด๋ฏธ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.)
void check_address(LINES *Lines,OBJECT *Object,SYMTAB*Symtab,LOCTAB*Loctab);
//ํ”ผ์—ฐ์‚ฐ์ž(token2๋‚˜ token3)๋ฅผ ์ฝ๊ณ ,
//1)์–ด๋“œ๋ ˆ์‹ฑ ๋ชจ๋“œ์ผ ๊ฒฝ์šฐ,2)์–ด๋“œ๋ ˆ์‹ฑ ๋ชจ๋“œ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ  Symtab์—์„œ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ Object.adress์— ์ €์žฅํ•  ์ฃผ์†Œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. 
void mkObjectcode(LINES*Lines,OBJECT*Object);
//Object.opcode์™€ Object.address๋ฅผ strcatํ•˜์—ฌ ๋ชฉ์ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
void mkObjectprogram(LOCTAB*Loctab,LINES*Lines,OBJECT*Object);
//ํ—ค๋” ๋ ˆ์ฝ”๋“œ: Lines์˜ ๊ธธ์ด๋ฅผ ์žฌ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
//ํ…์ŠคํŠธ ๋ ˆ์ฝ”๋“œ: ๋ชฉ์ ์ฝ”๋“œ ์‹œ์ž‘์ฃผ์†Œ, ๋ชฉ์ ์ฝ”๋“œ ๊ธธ์ด, ๋ชฉ์ ์ฝ”๋“œ ๋ฅผ ๊ตฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.
//์—”๋“œ ๋ ˆ์ฝ”๋“œ 

4. running

1)์ž…๋ ฅ ํŒŒ์ผ์ด ์—†์„ ๋•Œ.
noname01ใ„ดใ„นใ„ด

2)์ž…๋ ฅ ํŒŒ์ผ(copy.txt)๊ฐ€ ์žˆ์„ ๋•Œ.
noname01ใ„นใ„น

two-pass-sic-assembler's People

Contributors

heidihyeji avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.