<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>시스템 on Sobamemil</title>
    <link>https://blog.sobamemil.com/tags/%EC%8B%9C%EC%8A%A4%ED%85%9C/</link>
    <description>Recent content in 시스템 on Sobamemil</description>
    <generator>Hugo</generator>
    <language>ko</language>
    <lastBuildDate>Thu, 19 Mar 2020 14:02:07 +0900</lastBuildDate>
    <atom:link href="https://blog.sobamemil.com/tags/%EC%8B%9C%EC%8A%A4%ED%85%9C/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>시스템 프로그래밍 프로젝트 #7 최종 (Assembler in C)</title>
      <link>https://blog.sobamemil.com/posts/130-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-7-%EC%B5%9C%EC%A2%85-assembler-in-c/</link>
      <pubDate>Thu, 19 Mar 2020 14:02:07 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/130-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-7-%EC%B5%9C%EC%A2%85-assembler-in-c/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;지금까지의 프로젝트를 참고하여 2 pass assembler를 만들면 됩니다.&lt;/p&gt;
&lt;p&gt;먼저 어셈블러(Assembler)란?&lt;/p&gt;
&lt;p&gt;하드웨어가 직접 이해하여 실행하는 기계어는 일반적으로 비트 열 또는 16진수로 표현되기 때문에 인간이 이해하기 어렵다. 그래서 인간이 이해하기 쉽도록 기계어와 거의 일대일로 대응하는 기호로 표현된 언어로 어셈블러 언어가 있으며, 어셈블러 언어를 기계어로 번역하는 프로그램을 어셈블러, 번역하는 것을 어셈블이라고 합니다.&lt;/p&gt;
&lt;p&gt;어셈블러의 역할을 그림으로 간단하게 나타내 보면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/130/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;이 글에서 구현 할 2 패스 어셈블러의 알고리즘을 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pass 1 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #1</title>
      <link>https://blog.sobamemil.com/posts/022-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1/</link>
      <pubDate>Sun, 12 Jan 2020 15:32:16 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/022-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-1/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/22/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;입력 파일 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[sample.txt&lt;/p&gt;
&lt;p&gt;0.00MB](&lt;a href=&#34;https://blog.kakaocdn.net/dna/WEEud/btqA6oyqdRE/AAAAAAAAAAAAAAAAAAAAAF6o8u7LK5SB9AIdNSz_-IRJgLPtbZjLxGCM5EIoOvqI/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1788188399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=AakSu1DOyqICwWZkF6%2F%2FvvgPYME%3D&amp;amp;attach=1&amp;amp;knm=tfile.txt&#34;&gt;https://blog.kakaocdn.net/dna/WEEud/btqA6oyqdRE/AAAAAAAAAAAAAAAAAAAAAF6o8u7LK5SB9AIdNSz_-IRJgLPtbZjLxGCM5EIoOvqI/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;expires=1788188399&amp;allow_ip=&amp;allow_referer=&amp;signature=AakSu1DOyqICwWZkF6%2F%2FvvgPYME%3D&amp;attach=1&amp;knm=tfile.txt&lt;/a&gt;)
&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/22/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/22/img_3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;소스 코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;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&lt;/td&gt;
          &lt;td&gt;#include &amp;lt;stdio.h&amp;gt;  #include &amp;lt;string.h&amp;gt;  #include &amp;lt;stdlib.h&amp;gt;    void main() {  FILE   *fp;  char    buf[80];  int     n = 0;    if ((fp = fopen(&amp;ldquo;sample.s&amp;rdquo;, &amp;ldquo;r&amp;rdquo;)) == NULL) {  fprintf(stderr, &amp;ldquo;file not found&amp;hellip;\n&amp;rdquo;);  exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL) {  n += get_token_num(buf);  }  fclose(fp);  printf(&amp;ldquo;Number of token = %d\n&amp;rdquo;, n);  }    int get_token_num(char *bp) {  char    *cp;  int    n = 0;    for(cp = strtok(bp, &amp;quot; \t\n&amp;quot;); cp != NULL;  ) {  n++;  cp = strtok(NULL, &amp;quot; \t\n&amp;quot;);  }  return(n);  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #2</title>
      <link>https://blog.sobamemil.com/posts/021-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2/</link>
      <pubDate>Sun, 12 Jan 2020 15:12:34 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/021-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/21/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;입력 파일 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[sample.txt&lt;/p&gt;
&lt;p&gt;0.00MB](&lt;a href=&#34;https://blog.kakaocdn.net/dna/I5Kf9/btqA7q3zbiX/AAAAAAAAAAAAAAAAAAAAANrvSUHPXY9pb861NzszU1ZSjedb5bh_Z-XW6gY7gY7Q/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1788188399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=Z3BB1PLUPoQ6gz717fxkZL1UeNg%3D&amp;amp;attach=1&amp;amp;knm=tfile.txt&#34;&gt;https://blog.kakaocdn.net/dna/I5Kf9/btqA7q3zbiX/AAAAAAAAAAAAAAAAAAAAANrvSUHPXY9pb861NzszU1ZSjedb5bh_Z-XW6gY7gY7Q/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;expires=1788188399&amp;allow_ip=&amp;allow_referer=&amp;signature=Z3BB1PLUPoQ6gz717fxkZL1UeNg%3D&amp;attach=1&amp;knm=tfile.txt&lt;/a&gt;)
&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/21/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/21/img_3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;소스 코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;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&lt;/td&gt;
          &lt;td&gt;#include &amp;lt;stdio.h&amp;gt;  #include &amp;lt;string.h&amp;gt;  #include &amp;lt;stdlib.h&amp;gt;    void get_token_num(char *bp, int *num, int *alpha, int *other)  {  char *cp;  int i, count1, count2;    for(cp = strtok(bp, &amp;quot; \t\n&amp;quot;); cp != NULL;){  if(&amp;lsquo;A&amp;rsquo; &amp;lt;= cp[0] &amp;amp;&amp;amp; &amp;lsquo;Z&amp;rsquo; &amp;gt;= cp[0])  count1 = -1;  else if(&amp;lsquo;0&amp;rsquo; &amp;lt;= cp[0] &amp;amp;&amp;amp; &amp;lsquo;9&amp;rsquo; &amp;gt;= cp[0])  count1 = 0;  else{  count1 = 1;  count2 = 1;  break;  }    int len = strlen(cp);  for(i=0; i&amp;lt;len; i++){  if ( &amp;lsquo;A&amp;rsquo; &amp;lt;= cp[i] &amp;amp;&amp;amp; &amp;lsquo;Z&amp;rsquo; &amp;gt;= cp[i])  count2 = -1;  else if ( &amp;lsquo;0&amp;rsquo; &amp;lt;= cp[i] &amp;amp;&amp;amp; &amp;lsquo;9&amp;rsquo; &amp;gt;= cp[i])  count2 = 0;  else  count2 = 1;  if(count2 != count1){  count2 = 1;  break;  }  }  switch(count2) {  case -1 : *alpha += 1;  break;  case 0  : *num += 1;  break;  case 1  : *other += 1;  break;  default : fprintf(stderr,&amp;ldquo;error&amp;hellip;\n&amp;rdquo;); exit(2);  }  cp = strtok(NULL,&amp;quot; \t\n&amp;quot;);  }  }    int main(){  FILE *fp;  char buf[80];  int num = 0, alpha=0, other=0;    if((fp = fopen(&amp;ldquo;sample.s&amp;rdquo;, &amp;ldquo;r&amp;rdquo;)) == NULL){  fprintf(stderr, &amp;ldquo;file not found&amp;hellip;\n&amp;rdquo;); exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL){  get_token_num(buf, &amp;amp;num, &amp;amp;alpha, &amp;amp;other);  }  fclose(fp);    printf(&amp;ldquo;Number = %d\n&amp;rdquo;, num);  printf(&amp;ldquo;Alphabet = %d\n&amp;rdquo;, alpha);  printf(&amp;ldquo;Other = %d\n&amp;rdquo;, other);    return 0;  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #3</title>
      <link>https://blog.sobamemil.com/posts/020-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3/</link>
      <pubDate>Sun, 12 Jan 2020 14:37:07 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/020-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-3/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/20/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;입력 파일 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[sample.txt&lt;/p&gt;
&lt;p&gt;0.00MB](&lt;a href=&#34;https://blog.kakaocdn.net/dna/45Fiq/btqA5PcbiZG/AAAAAAAAAAAAAAAAAAAAAKYSkI0QPrzP-9mNerqdA2M0Tul-f5_nfn5HKLp50AXV/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1788188399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=zgVylyi4wQaArIqnlrxSbRC1hSk%3D&amp;amp;attach=1&amp;amp;knm=tfile.txt&#34;&gt;https://blog.kakaocdn.net/dna/45Fiq/btqA5PcbiZG/AAAAAAAAAAAAAAAAAAAAAKYSkI0QPrzP-9mNerqdA2M0Tul-f5_nfn5HKLp50AXV/sample.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;expires=1788188399&amp;allow_ip=&amp;allow_referer=&amp;signature=zgVylyi4wQaArIqnlrxSbRC1hSk%3D&amp;attach=1&amp;knm=tfile.txt&lt;/a&gt;)
&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/20/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/20/img_3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;소스 코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;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&lt;/td&gt;
          &lt;td&gt;#include &amp;lt;stdio.h&amp;gt;  #include &amp;lt;string.h&amp;gt;  #include &amp;lt;stdlib.h&amp;gt;    char sym[50][10], inst[50][10], op[50][10];  int symcnt, instcnt, opcnt= 0;    void get_token_num(char *bp);    void main() {  FILE *fp;  char buf[80];  int num = 0;  int i;  if ((fp = fopen(&amp;ldquo;sample.s&amp;rdquo;, &amp;ldquo;r&amp;rdquo;)) == NULL) {  fprintf(stderr, &amp;ldquo;file not found&amp;hellip;\n&amp;rdquo;); exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL) {  get_token_num(buf);  }  fclose(fp);  printf(&amp;ldquo;심볼 10칸씩 출력 :\n\n&amp;rdquo;);  for(i=0; i&amp;lt;symcnt; i++){  if(num&amp;lt;10){  printf(&amp;quot;%s\t&amp;quot;, sym[i]);  num++;  }  else if(num==10){  printf(&amp;quot;\n&amp;quot;);  num=0;  i -= 1;  }  }  num = 0;  printf(&amp;quot;\n명령어 10칸씩 출력 :\n\n&amp;quot;);  for(i=0; i&amp;lt;instcnt; i++){  if(num&amp;lt;10){  printf(&amp;quot;%s\t&amp;quot;, inst[i]);  num++;  }  else if(num==10){  printf(&amp;quot;\n&amp;quot;);  num=0;  i -= 1;  }  }  printf(&amp;quot;\n\n피연산자 10칸씩 출력 :\n\n&amp;quot;);  num = 0;  for(i=0; i&amp;lt;opcnt; i++){  if(num&amp;lt;10){  printf(&amp;quot;%s\t&amp;quot;, op[i]);  num++;  }  else if(num==10){  printf(&amp;quot;\n&amp;quot;);  num=0;  i -= 1;  }  }  printf(&amp;quot;\n\n&amp;quot;);  }    void get_token_num(char *bp){  char *cp;  char *test;  int n = 0;  char* result = strtok(bp,&amp;quot; \t\n&amp;quot;);  while(result!=NULL)    {  while(1){  if(n&amp;lt;4){  switch (n){  case 0 : n++;  break;  case 1 : strcpy(sym[symcnt], result);  symcnt++;  n++;  break;  case 2 : strcpy(inst[instcnt], result);  instcnt++;  n++;  break;  case 3 : strcpy(op[opcnt], result);  opcnt++;  n++;  break;  }  }  else n=0;  break;  }  result = strtok(NULL,&amp;quot;\t\n&amp;quot;);  }  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #4</title>
      <link>https://blog.sobamemil.com/posts/019-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-4/</link>
      <pubDate>Thu, 19 Dec 2019 12:41:48 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/019-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-4/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/19/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;입력 파일 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[numb.txt&lt;/p&gt;
&lt;p&gt;0.00MB](&lt;a href=&#34;https://blog.kakaocdn.net/dna/EqJyk/btqA57RastK/AAAAAAAAAAAAAAAAAAAAAMzaoxsjOizEuGCR5qF4Fzsa0iAquIjz6f_89H3gPle-/numb.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1788188399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=wyxmqU%2F2ZPAkscVFgGfrU1oKVrU%3D&amp;amp;attach=1&amp;amp;knm=tfile.txt&#34;&gt;https://blog.kakaocdn.net/dna/EqJyk/btqA57RastK/AAAAAAAAAAAAAAAAAAAAAMzaoxsjOizEuGCR5qF4Fzsa0iAquIjz6f_89H3gPle-/numb.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;expires=1788188399&amp;allow_ip=&amp;allow_referer=&amp;signature=wyxmqU%2F2ZPAkscVFgGfrU1oKVrU%3D&amp;attach=1&amp;knm=tfile.txt&lt;/a&gt;)
&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/19/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/19/img_3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;소스 코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;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&lt;/td&gt;
          &lt;td&gt;#include&amp;lt;stdio.h&amp;gt;  #include&amp;lt;string.h&amp;gt;  #include&amp;lt;stdlib.h&amp;gt;  #include&amp;lt;math.h&amp;gt;    void get_token_num(char *bp);  void hextodec(char *test, int len); // hex to decimal function  void atohex(char *ascii, int len); // ascii to hex function  int sum = 0;  int cnt = 0;    int main() {  FILE *fp = NULL;  char buf[80];  if((fp = fopen(&amp;ldquo;numb.s&amp;rdquo;, &amp;ldquo;r&amp;rdquo;))==NULL) {  printf(&amp;ldquo;file not found&amp;hellip;\n&amp;rdquo;); exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL) {  get_token_num(buf);  }  fclose(fp);  printf(&amp;quot;\nsum = %d\n&amp;quot;, sum);  return 0;  }  void get_token_num(char *bp){  int i,len;  char test[10];  char* result = strtok(bp,&amp;quot; \t\n&amp;quot;); // 문자열 자르기  while(result!=NULL) {       // 자른 token이 NULL 일떄까지 loop  if(result[0] == &amp;lsquo;X&amp;rsquo;){ // 자른 token 의 원소가 &amp;lsquo;X&amp;rsquo; 이면 hexadecimal  for(i=2; i&amp;lt;=strlen(result)-2; i++){ // 처리할 부분만 잘라냄  test[i-2] = result[i];  cnt++;  }  printf(&amp;ldquo;token : %s\t&amp;rdquo;,result);  printf(&amp;quot;\t\t&amp;quot;);  hextodec(test, cnt);  cnt=0;  }  else if(result[0] == &amp;lsquo;C&amp;rsquo;){ // 자른 token의 첫 원소가 &amp;lsquo;C&amp;rsquo; 이면 ASCII  printf(&amp;ldquo;token : %s\t&amp;rdquo;,result);  for(i=2; i&amp;lt;=strlen(result)-2; i++){ // 처리할 부분만 잘라냄  test[i-2] = result[i];  cnt++;  }  test[cnt] = &amp;lsquo;\0&amp;rsquo;;  atohex(test, cnt);  cnt=0;  }  else { // 자른 token이 문자열 상수이면 decimal  printf(&amp;ldquo;token : %s\t&amp;rdquo;,result);  sum += atoi(result);  printf(&amp;quot;\t\tdec : %d\n&amp;quot;, atoi(result));  }  result = strtok(NULL,&amp;quot; \t\n&amp;quot;);  }  }  void hextodec(char *test, int len){ // 16진수로 된 문자열  int decimal = 0;               // 10진수를 저장할 변수  int i;  int position = 0;  for (i = len - 1; i &amp;gt;= 0; i&amp;ndash;) {   // 문자열을 역순으로 반복  char ch = test[i];         // 각 자릿수에 해당하는 문자를 얻음  if (ch &amp;gt;= 48 &amp;amp;&amp;amp; ch &amp;lt;= 57) {      // 문자가 0&lt;del&gt;9이면(ASCII 코드 48&lt;/del&gt;57)  // 문자에서 0에 해당하는 ASCII 코드 값을 빼고  // 16에 자릿수를 거듭제곱한 값을 곱함  decimal += (ch - 48) * pow(16, position);  }  else if (ch &amp;gt;= 65 &amp;amp;&amp;amp; ch &amp;lt;= 70) {   // 문자가 A&lt;del&gt;F이면(ASCII 코드 65&lt;/del&gt;70)  // 대문자로 된 16진수의 처리  // 문자에서 (A에 해당하는 ASCII 코드 값 - 10)을 빼고  // 16에 자릿수를 거듭제곱한 값을 곱함  decimal += (ch - (65 - 10)) * pow(16, position);  }  else if (ch &amp;gt;= 97 &amp;amp;&amp;amp; ch &amp;lt;= 102) {  // 문자가 a&lt;del&gt;f이면(ASCII 코드 97&lt;/del&gt;102)  // 소문자로 된 16진수의 처리  // 문자에서 (a에 해당하는 ASCII 코드 값 - 10)을 빼고  // 16에 자릿수를 거듭제곱한 값을 곱함  decimal += (ch - (97 - 10)) * pow(16, position);  }  position++;  }  printf(&amp;ldquo;dec : %d\n&amp;rdquo;, decimal);  sum += decimal;  }  void atohex(char *ascii, int len){  char outword[10];  int i, tmp_len;  for(i = 0; i&amp;lt;len; i++){  sprintf(outword+i*2, &amp;ldquo;%02X&amp;rdquo;, ascii[i]);  }  tmp_len = strlen(outword);  printf(&amp;ldquo;hex : %s\t&amp;rdquo;, outword);  hextodec(outword, tmp_len);  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #6</title>
      <link>https://blog.sobamemil.com/posts/015-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-6/</link>
      <pubDate>Thu, 21 Nov 2019 22:54:37 +0900</pubDate>
      <guid>https://blog.sobamemil.com/posts/015-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-6/</guid>
      <description>&lt;p&gt;&lt;strong&gt;문제 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/15/img_1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;입력 데이터 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[Command.txt&lt;/p&gt;
&lt;p&gt;0.00MB](&lt;a href=&#34;https://blog.kakaocdn.net/dna/bnbU30/btqBgeimBnY/AAAAAAAAAAAAAAAAAAAAAAPakDbTA4jf0WyG_DmDE76emfyLiazho4x1advtOToN/Command.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1788188399&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=2iAm290NW4CFkRgpHKAQHRqBvxw%3D&amp;amp;attach=1&amp;amp;knm=tfile.txt&#34;&gt;https://blog.kakaocdn.net/dna/bnbU30/btqBgeimBnY/AAAAAAAAAAAAAAAAAAAAAAPakDbTA4jf0WyG_DmDE76emfyLiazho4x1advtOToN/Command.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;expires=1788188399&amp;allow_ip=&amp;allow_referer=&amp;signature=2iAm290NW4CFkRgpHKAQHRqBvxw%3D&amp;attach=1&amp;knm=tfile.txt&lt;/a&gt;)
&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/15/img_2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;실행 결과 :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://img.sobamemil.com/posts/15/img_3.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;코드 :&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;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&lt;/td&gt;
          &lt;td&gt;#include&amp;lt;stdio.h&amp;gt;  #include&amp;lt;string.h&amp;gt;  #include&amp;lt;stdlib.h&amp;gt;    void PrintAssm(char* name_buf, int name_size);    struct OPTAB{  char name[8];  int len;  } Wordtab[] = { {&amp;ldquo;LDA&amp;rdquo;, 3}, {&amp;ldquo;STA&amp;rdquo;, 4}, {&amp;ldquo;ADD&amp;rdquo;, 5}, {&amp;ldquo;TIX&amp;rdquo;, 2}, {&amp;ldquo;CMP&amp;rdquo;, 6} };    int main() {  char name_buf[8];  int wordtab_size = sizeof(Wordtab)/12; // Wordtab에 정의된 단어 갯수, 12 = size of char[8] + int  FILE* fp;    if((fp = fopen(&amp;ldquo;Command.txt&amp;rdquo;, &amp;ldquo;r&amp;rdquo;))==NULL) {  printf(&amp;ldquo;file not found&amp;hellip;\n&amp;rdquo;); exit(1);  }  while(fgets(name_buf, sizeof(name_buf), fp) != NULL) { // fgets() 함수는 scanf나 gets()와는 달리 뒤에 개행문자가 붙는다  if(name_buf[0] == &amp;lsquo;\n&amp;rsquo;) // name_buf 배열 맨 처음이 개행문자이면 메시지 출력 없이 무시  continue;  if(name_buf[strlen(name_buf) - 1] == &amp;lsquo;\n&amp;rsquo;) // name_buf 배열 맨 끝이 개행문자이면  name_buf[strlen(name_buf) - 1] = &amp;lsquo;\0&amp;rsquo;; // naem_buf 배열 맨 끝에 붙은 개행문자 제거  PrintAssm(name_buf, wordtab_size);  }  fclose(fp);  }    void PrintAssm(char* name_buf, int wordtab_size){  static int k=1; // 줄 번호를 나타내는 변수  static int loc=0; // 단어의 시작 위치를 나타내는 변수  int i, res=-1;  for(i=0; i&amp;lt;wordtab_size; i++){  res = strcmp(name_buf, Wordtab[i].name); // strcmp : 두 문자열이 같으면 0 리턴  if(res==0){  break;  }  }  if(i==wordtab_size){  printf(&amp;quot; Undefined word\n&amp;quot;); // Wordtab 배열 안에 정의되어 있지 않는 명령어면 출력하고 단어 무시  }  else{  if(k &amp;lt; 10)  printf(&amp;quot; &amp;ldquo;);  printf(&amp;quot;%d, %.2X, %s, %.2d\n&amp;rdquo;, k, loc, Wordtab[i].name, Wordtab[i].len);  loc += Wordtab[i].len; // 단어의 해당길이를 더해서 다음 시작 위치를 알려줌  k++;  }  }  &lt;a href=&#34;http://colorscripter.com/info#e&#34;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;설명 :&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
