<?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/en/tags/%EC%8B%9C%EC%8A%A4%ED%85%9C/</link>
    <description>Recent content in 시스템 on Sobamemil</description>
    <image>
      <title>Sobamemil</title>
      <url>https://blog.sobamemil.com/images/og-image.png</url>
      <link>https://blog.sobamemil.com/images/og-image.png</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 19 Mar 2020 14:02:07 +0900</lastBuildDate>
    <atom:link href="https://blog.sobamemil.com/en/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/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;pass 1 :&lt;/b&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #1</title>
      <link>https://blog.sobamemil.com/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;Input File:&lt;/b&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;b&gt;Execution Result:&lt;/b&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;b&gt;소스 Code:&lt;/b&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;quot;sample.s&amp;quot;, &amp;quot;r&amp;quot;)) == NULL) {  fprintf(stderr, &amp;quot;file not found...\n&amp;quot;);  exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL) {  n += get_token_num(buf);  }  fclose(fp);  printf(&amp;quot;Number of token = %d\n&amp;quot;, 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;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #2</title>
      <link>https://blog.sobamemil.com/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;Input File:&lt;/b&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;b&gt;Execution Result:&lt;/b&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;b&gt;소스 Code:&lt;/b&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(&#39;A&#39; &amp;lt;= cp[0] &amp;amp;&amp;amp; &#39;Z&#39; &amp;gt;= cp[0])  count1 = -1;  else if(&#39;0&#39; &amp;lt;= cp[0] &amp;amp;&amp;amp; &#39;9&#39; &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 ( &#39;A&#39; &amp;lt;= cp[i] &amp;amp;&amp;amp; &#39;Z&#39; &amp;gt;= cp[i])  count2 = -1;  else if ( &#39;0&#39; &amp;lt;= cp[i] &amp;amp;&amp;amp; &#39;9&#39; &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;quot;error...\n&amp;quot;); 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;quot;sample.s&amp;quot;, &amp;quot;r&amp;quot;)) == NULL){  fprintf(stderr, &amp;quot;file not found...\n&amp;quot;); 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;quot;Number = %d\n&amp;quot;, num);  printf(&amp;quot;Alphabet = %d\n&amp;quot;, alpha);  printf(&amp;quot;Other = %d\n&amp;quot;, other);    return 0;  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #3</title>
      <link>https://blog.sobamemil.com/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;Input File:&lt;/b&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;b&gt;Execution Result:&lt;/b&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;b&gt;소스 Code:&lt;/b&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;quot;sample.s&amp;quot;, &amp;quot;r&amp;quot;)) == NULL) {  fprintf(stderr, &amp;quot;file not found...\n&amp;quot;); exit(1);  }  while(fgets(buf, sizeof(buf), fp) != NULL) {  get_token_num(buf);  }  fclose(fp);  printf(&amp;quot;심볼 10칸씩 출력 :\n\n&amp;quot;);  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;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #4</title>
      <link>https://blog.sobamemil.com/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;Input File:&lt;/b&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;b&gt;Execution Result:&lt;/b&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;b&gt;소스 Code:&lt;/b&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;quot;numb.s&amp;quot;, &amp;quot;r&amp;quot;))==NULL) {  printf(&amp;quot;file not found...\n&amp;quot;); 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] == &#39;X&#39;){ // 자른 token 의 원소가 &#39;X&#39; 이면 hexadecimal  for(i=2; i&amp;lt;=strlen(result)-2; i++){ // 처리할 부분만 잘라냄  test[i-2] = result[i];  cnt++;  }  printf(&amp;quot;token : %s\t&amp;quot;,result);  printf(&amp;quot;\t\t&amp;quot;);  hextodec(test, cnt);  cnt=0;  }  else if(result[0] == &#39;C&#39;){ // 자른 token의 첫 원소가 &#39;C&#39; 이면 ASCII  printf(&amp;quot;token : %s\t&amp;quot;,result);  for(i=2; i&amp;lt;=strlen(result)-2; i++){ // 처리할 부분만 잘라냄  test[i-2] = result[i];  cnt++;  }  test[cnt] = &#39;\0&#39;;  atohex(test, cnt);  cnt=0;  }  else { // 자른 token이 문자열 상수이면 decimal  printf(&amp;quot;token : %s\t&amp;quot;,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--) {   // 문자열을 역순으로 반복  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;quot;dec : %d\n&amp;quot;, 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;quot;%02X&amp;quot;, ascii[i]);  }  tmp_len = strlen(outword);  printf(&amp;quot;hex : %s\t&amp;quot;, outword);  hextodec(outword, tmp_len);  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>시스템 프로그래밍 프로젝트 #6</title>
      <link>https://blog.sobamemil.com/en/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/en/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;b&gt;Problem:&lt;/b&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;b&gt;입력 데이터 :&lt;/b&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;b&gt;Execution Result:&lt;/b&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;b&gt;Code:&lt;/b&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;quot;LDA&amp;quot;, 3}, {&amp;quot;STA&amp;quot;, 4}, {&amp;quot;ADD&amp;quot;, 5}, {&amp;quot;TIX&amp;quot;, 2}, {&amp;quot;CMP&amp;quot;, 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;quot;Command.txt&amp;quot;, &amp;quot;r&amp;quot;))==NULL) {  printf(&amp;quot;file not found...\n&amp;quot;); exit(1);  }  while(fgets(name_buf, sizeof(name_buf), fp) != NULL) { // fgets() 함수는 scanf나 gets()와는 달리 뒤에 개행문자가 붙는다  if(name_buf[0] == &#39;\n&#39;) // name_buf 배열 맨 처음이 개행문자이면 메시지 출력 없이 무시  continue;  if(name_buf[strlen(name_buf) - 1] == &#39;\n&#39;) // name_buf 배열 맨 끝이 개행문자이면  name_buf[strlen(name_buf) - 1] = &#39;\0&#39;; // 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;quot;);  printf(&amp;quot;%d, %.2X, %s, %.2d\n&amp;quot;, k, loc, Wordtab[i].name, Wordtab[i].len);  loc += Wordtab[i].len; // 단어의 해당길이를 더해서 다음 시작 위치를 알려줌  k++;  }  }&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;Explanation:&lt;/b&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
