SIC/XE 머신 어셈블러 c프로그램(숭실대)
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
해당 자료는 10페이지 까지만 미리보기를 제공합니다.
10페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

SIC/XE 머신 어셈블러 c프로그램(숭실대)에 대한 보고서 자료입니다.

목차

1장 프로젝트 개요
1.1 개발 배경 및 목적

2장 배경 지식
2.1 주제에 관한 배경지식
2.2 기술적 배경지식

3장 시스템 설계 내용
3.1 전체 시스템 설계 내용
3.2 모듈별 설계 내용

4장 시스템 구현 내용 ( 구현 화면 포함 )
4.1 전체 시스템 구현 내용
4.2 모듈별 구현 내용

5장 기대효과 및 결론

첨부 프로그램 소스파일 (1쪽에 2 column 으로 가로 인쇄 권장)

6장. 개발환경

본문내용

재 여부 확인 하기 위한 함수
{
literal_list * cur = l_head;
if (strstr(str, \"=\"))
{
while ((cur != NULL) && strcmp(cur->literal_value, str) != 0)
{
cur = cur->next;
}
if (cur != NULL) //해당 리터널이 존재한다면
{
return 1;
}
else
{
literal_list_insert(str, sec_name);
}
return 1;
}
else
return -1;
}
my_assembler.h
/*
* my_assembler 함수를 위한 변수 선언 및 매크로를 담고 있는 헤더 파일이다.
*
*/
#define MAX_INST 256
#define MAX_LINES 5000
#define MAX_COLUMNS 4
#define MAX_OPERAND 3
/*
* 기계어 목록 파일로 부터 정보를 받아와 생성하는 기계어 변환 테이블이다.
* 해당 기계어의 정보를 토큰으로 나눠 기록하고 있다.
*/
char *inst[MAX_INST][MAX_COLUMNS];
int inst_index;
/*
* 어셈블리 할 소스코드를 토큰 단위로 관리하는 테이블이다.
* 관리 정보는 소스 라인 단위로 관리되어진다.
*/
char *input_data[MAX_LINES];
static int line_num;
int label_num;
struct token_unit {
int locctr; //효율적 연산을 위해 토큰테이블에 locctr 추가
char obj_code[9]; //토큰단위로 obj_code 저장
char *label;
char *operator;
char *operand[MAX_OPERAND];
char *comment;
};
typedef struct token_unit token;
token *token_table[MAX_LINES];
static int token_line;
/*
* 심볼을 관리하는 구조체이다.
* 심볼 테이블은 심볼 이름, 심볼의 위치로 구성된다.
*/
struct symbol_unit {
char sec_name[7]; //section단위로 같은 이름의 심볼이 있을 수 있으므로 sec_name 설정
char symbol[10];
int addr;
};
typedef struct symbol_unit symbol;
symbol sym_table[MAX_LINES];
static int locctr;
//--------------
static char *input_file;
static char *output_file;
enum registers { A, X, L, B, S, T, F, PC = 8, SW }; // 레지스터 번호 열거형으로 지정
typedef struct literal_list {
char sec_name[7];//섹션 이름
char literal_value[10]; //literal 값
int addr; //해당 literal 주소
int flag; //출력했는지 확인
struct literal_list *next; //바로 다음 literal
} literal_list;
literal_list *l_head;
literal_list *l_tail;
literal_list *l_cur;
static int literal_count;
typedef struct ext_list {
char name[7];
char def[10][7];
char ref[10][7];
int def_count;
int ref_count;
int sec_length;
} ext_list;
ext_list section_list[10];
static int section_count;
int init_my_assembler(void);
static int assem_pass1(void);
static int assem_pass2(void);
int init_inst_file(char *inst_file);
int init_input_file(char *input_file);
int search_opcode(char *str); //명령어 찾는 함수
void make_objectcode(char *file_name);
int handle_directive(char* input_data, char *directive, int index); //지시명령어 처리 함수 추가
void literal_list_insert(char *str, char *sec_name); //literal 삽입함수
char* literal_print(); //주소를 저장하지 않은 literal 반환
void write_symtab(int index, char* sec_name); //심볼테이블 작성 함수
int check_symbol(char* symbol, char* sec_name); //해당 심볼이 있는 심볼테이블에서 검색해서 주소 반환
void literal_set(); // pass1에서 리터널을 다룬거를 pass2에서 다루기위한 함수
char * objcode(int line, int op_index, char* sec_name, int flag);
int num_register(char *str); //레지스터 번호 리턴
int return_literal_addr(char *str, char *sec_name); //해당 리터널 어드레스 리턴
int literal_check(char *str, char *sec_name); //해당 literal check
int check_extref(char *str, char *sec_name); //extref로 선언한 레이블인지 확인
int return_sec_length(char *str); //section 크기 반환
int return_literal_addr(char *str, char *sec_name);
6. 개발환경
os : Windows 7
tool : Microsoft Visual Studio 2013
cpu : pentium E5200 @ 2.50GHZ
ram : 4.0GB
  • 가격3,000
  • 페이지수70페이지
  • 등록일2020.12.08
  • 저작시기2015.3
  • 파일형식한글(hwp)
  • 자료번호#1141708
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니