[어셈블리어]SIC(Simplified Instruction Computer) Assembler
*재*
다운로드
장바구니
소개글
sicasm을 실행시키기 위하여 도스상에서c:> sicasm exam.src
위와 같이 하면 source file과 이름이 같은 exam.tmp, exam.lst, exam.obj의 3개 파일이 만들어 집니다.
exam.tmp는 pass one을 수행하면서 만들게 되는데 각각의 LOCCTR 값만이 char 형으로 저장되어 있습니다.
ex) 1000
1003
1006
exam.lst는 pass two를 수행하면서 만들게 되는데 각각의 LOCCTR 값과 source file의 내용과 기계어내용이 char 형으로 저장되어 있습니다.
ex) 1000 COPY START 1000
1000 FIRST STL RETADR 141033
exam.obj는 원래 hexadecimal로 저장하는 것 같은데 저는 char형으로 저장하였습니다. 만약 hexadecimal로 바꾸고자 한다면
Head record :
7자리(H와 프로그램이름)는 그냥 읽어들인 다음 문자를 2개씩 읽어서 integer로 바꾼 다음 char형의 변수에 저장한 후 변수를 파일에 저장합니다.
Text record :
1자리(T)는 그냥 읽어들인 다음 문자를 2개씩 읽어서 위와 같이 하면 될 것입니다.
ex)
HCOPY 00100000107A
T0010001E*************0*************0154820613C100300102A0C103900102D
T00101E150C10*************34C0000454F4*************
T0020391E041030001030E0205D30203FD8205D*************420572C205E38203F
T0020571C1010364C0000F1001000041000E0*************064DC20792C1036
T0*************4C000005
E001000
결과 파일들은 모두 확장자만 맞췄을 뿐 character의 연속이므로 DOS 창에서 type 명령을 사용하여 볼 수 있습니다.
컴파일 실행환경
turbo c/dos본문내용
int Sym_Insert(struct Node record);//record를 넘겨받아 memory를 할당받아서 record를 복사하고 할당받은 메모리를 테이블에 삽입한다.
int RetAddr(char * symbol, char * Address);
//symbol을 SymTable에서 찾아서 저장되어 있는 LOCCTR 값을 Address에 char형으로 반환한다.
int ReadALine(char*LABLE,char*OPCODE,char*OPERAND,FILE*sourceFp);
//source file의 한줄을 읽어서 LABLE, OPCODE, OPERAND로 구분하여 char형으로 담아 놓는다.
void ErrProcess(int temp,FILE * tempFp);
//temp로 넘겨받은 값에 따라서 tempFp에 error 메시지를 기록한다.
int ByteDistinct(char * OPERAND);
//opcode가 byte일 경우 C` `(character), X` `(hex)인지를 판단하여 길이를 return 값으로 반환한다.
int PassOne(char * sourceFN);
//sourceFN을 main으로부터 받아서 PassOne을 수행하고 .tmp 파일에 LOCCTR값들을 기록한다.
void ReadLOC(char * LOCCTR,FILE * tempFp)
//.tmp 파일에서 LOCCTR을 하나씩 읽어들이는 함수
void MakeHrecord(char*Name,char * LOCCTR,int ProgLength,FILE * objectFp);
//Head record를 만들고 Name 시작주소 길이를 char형으로 objectFp에 기록한다.
void InputLength(FILE * objectFp,int * count);
//objectFp의 Text record의 시작주소 다음에 길이를 기록
void MakeTrecord(char * LOCCTR,FILE * objectFp,int * count);
//objectFp의 Text record를 만든다.
void WriteObj(FILE * listFp, char * LOCCTR, char * machine, char * Address, FILE * objectFp,int * count)
//objectFp와 listFp에 opcode의 hex code값과 주소의 hex값을 기록
압축파일 내 파일목록
report.hwp
exam.src
Sic Assembler.cpp
SicAsm.exe
exam.src
Sic Assembler.cpp
SicAsm.exe
참고 자료
없음이 자료와 함께 구매한 자료
- SIC Assembler 및 Simulator 사용법 4페이지
- [시스템 프로그래밍] SIC 어셈블러 7페이지
- c로 구현한 sic 어셈블러 소스(약식 보고서도 포함) 22페이지
- SIC Assembler 13페이지
- 어셈블러의 PASS1, PASS2 구현 23페이지