본문 바로가기

System Programming

(7)
시스템 프로그래밍 프로젝트 #7 최종 (Assembler in C) 문제 : 지금까지의 프로젝트를 참고하여 2 pass assembler를 만들면 됩니다. 먼저 어셈블러(Assembler)란? 하드웨어가 직접 이해하여 실행하는 기계어는 일반적으로 비트 열 또는 16진수로 표현되기 때문에 인간이 이해하기 어렵다. 그래서 인간이 이해하기 쉽도록 기계어와 거의 일대일로 대응하는 기호로 표현된 언어로 어셈블러 언어가 있으며, 어셈블러 언어를 기계어로 번역하는 프로그램을 어셈블러, 번역하는 것을 어셈블이라고 합니다. 어셈블러의 역할을 그림으로 간단하게 나타내 보면 다음과 같습니다. 이 글에서 구현 할 2 패스 어셈블러의 알고리즘을 보겠습니다. pass 1 : pass 2 : 입력 파일 : 실행 결과 : 출력 파일 : 코드 : 1 2 3 4 5 6 7 8 9 10 11 12 13 ..
시스템 프로그래밍 프로젝트 #1 문제 : 입력 파일 : 실행 결과 : 소스 코드 : 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 #include #include #include void main() { FILE *fp; char buf[80]; int n = 0; if ((fp = fopen("sample.s", "r")) == NULL) { fprintf(stderr, "file not found...\n"); exit(1); } while(fgets(buf, sizeof(buf), fp) != NULL) { n += get_token_num(buf); } fclose(fp); printf("Number of token = %d\n", n)..
시스템 프로그래밍 프로젝트 #2 문제 : 입력 파일 : 실행 결과 : 소스 코드 : 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 #include #include #include void get_token_num(char *bp, int *num, int *alpha, int *other) { char *cp; int i, count1, count2; for(cp = strtok(bp, " \t\n"); cp != NULL;){ if('A' = cp[0]..
시스템 프로그래밍 프로젝트 #3 문제 : 입력 파일 : 실행 결과 : 소스 코드 : 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 #include #include #include char sym[50][10], inst[50][10], op[50][10]; int symcnt, instcnt, opcnt= ..
시스템 프로그래밍 프로젝트 #4 문제 : 입력 파일 : 실행 결과 : 소스 코드 : 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 #include #include #include #include void get_token_num(char *bp); void hextodec(char *test, i..
시스템 프로그래밍 프로젝트 #5 문제 : 입력 파일 : 실행결과 : 소스코드 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include #include int len=0; void print_len_word(char *bp){ int i; for(i=0; bp[i]!='\0'; i++) // bp 배열의 끝이 나올때까지 loop if(bp[i]=='\n') bp[i] = '\0'; // bp[i]가 개행문자이면 그곳을 NULL로 바꿈 printf("%.2X: %s\n", len, bp); len += strlen(bp); } int main() { char buf[80]; FILE* fp; if(!(fp = fopen("test1.txt", "r")))..
시스템 프로그래밍 프로젝트 #6 문제 : 입력 데이터 : 실행 결과 : 코드 : 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 #include #include #include void PrintAssm(char* name_buf, int name_size); struct OPTAB{ char name[8]; int len; } Wordtab[] = { {"LDA", 3}, {"STA", 4}, {"ADD", 5}, {"TIX", 2}, {"CMP", 6} }; int main() { char name_buf[8]; int wordta..