현재 ASSEMBLER를 직접 짜보라는 과제물과 전쟁중인 컴퓨터공학과 학생입니다. ㅠㅠ <div><br></div> <div>지금 당면한 과제는 OBJFILE 에서 각 앞의 코드들을 받아 그 코드들에 맞게 각각 라벨이나 CODE길이를 분리하여 나타내는 건데요.</div> <div><br></div> <div>지금 제가 테스트할때 쓰는 OBJFILE 의 코드입니다.</div> <div><br></div> <div><div>HLAB1 001000000060</div> <div>T0010001E0010510C105A04105A0010541890270C105400105A18104E0C105A28104B</div> <div>T00101E183810060010540C10570000050000040000030000020000011</div> <div>T0010391E00000700000700000700000700000700000700000F000003000000000000</div> <div>M00000705</div> <div>E001000</div></div> <div><br></div> <div>이 OBJFILE의 코드를 각각 맨앞의 코드가 뭔지 판별하는데는 성공했습니다.</div> <div>그런데 구현도중 T 코드의 문장을 처리하는데 문제가 발생했어요 ㅠ.ㅠ </div> <div>각각의 태그, 저장할주소, 코드의 사이즈는 그냥 문자배열에 때려박아서 출력하면되는데</div> <div>뒤의 나머지 CODE들을 16진수로 변화하여 6자씩 끊어서, 말그대로 ASSEMBLER처럼 받아서 처리하라는 건데요.</div> <div>strtol 을 이용하여 16진수로 변환하여 저장하는것 까진 알겠습니다.!!</div> <div>그런데...</div> <div><br></div> <div><div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201411/1415622856ibICRAMR.jpg" width="800" height="113" alt="b.b.JPG" class="chimg_photo" style="border:none;"></div><br></div> <div>T TAG라인 처리하는 2번째!! 2번째 줄을 보시면 000001 하고 나머지 뒤의 12개 숫자는 출력이 되면 안되는데.....</div> <div>제 지식 선에선 별 수를 다써봐도 출력이 되버리네요.... 배열도 초기화 해보고, NULL값 처리도 해보고....</div> <div>이미 과제는 지각제출인지라 기왕 지각인거 완벽하게라도 해서 제출해 보고자 오유에 질문을 올립니다.....ㅠㅠ</div> <div>저부분만 처리가 되면 나머지 M이랑 E 태그 라인도 일사천리로 진행될거 같거든요 ㅠ.ㅠ</div> <div><br></div> <div>어디가 어떻게 잘못된건지 알려주시면 정말 감사할게요 ㅠ.ㅠ(전문가가 아니시더라고 비슷한 과제를 해본 경험이 있는 대학생여러분 환영합니다! 웰컴!)</div> <div><br></div> <div><br></div> <div><br></div> <div>대망(大亡)의 소스코드 따라갑니다...</div> <div><br></div> <div><div>#include <stdio.h></div> <div>#include <string.h></div> <div>#include <stdlib.h></div> <div>#include <errno.h></div> <div><br></div> <div>#define LINESIZE 71</div> <div>#define LABELSIZE 1</div> <div>#define ADDRESS_SIZE 6</div> <div>#define PGSIZE 6</div> <div>#define LENGTH_SIZE 2</div> <div>#define COD_SEL_SIZE 6</div> <div>#define CODESIZE 61</div> <div><br></div> <div>int main(int argc, char *argv[]){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char cline[LINESIZE];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char label;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char pgname[PGSIZE];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char code[COD_SEL_SIZE];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char address[ADDRESS_SIZE];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char addres[LENGTH_SIZE];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>long length;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>long staddress;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>long realcode;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>int i;</div> <div><br></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>char *cptr;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>FILE *rfd;<span class="Apple-tab-span" style="white-space:pre;"> </span>//파일을 읽고 쓸 인자 생성</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if (argc != 2){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("Uusage : %s OBJFILE\n", argv[0]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exit(0);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if ((rfd = fopen(argv[1], "r")) == NULL){<span class="Apple-tab-span" style="white-space:pre;"> </span>//srcfile을 읽어들임.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>fprintf(stderr, "%s : %s: cannot open for reading : %s\n", argv[0], argv[1], strerror(errno));</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>exit(0);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>while (fgets(cline, LINESIZE, rfd) > 0){ //srcfile을 줄단위로 읽어들임.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>label=cline[0];</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cptr=cline;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>if(label=='H'){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(pgname,cptr+LABELSIZE,PGSIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(address,cptr+LABELSIZE+PGSIZE,ADDRESS_SIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>staddress=strtol(address,NULL,16);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(addres,cptr+LABELSIZE+PGSIZE+ADDRESS_SIZE,LENGTH_SIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>length=strtol(addres,NULL,16);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("TAG : %c PROGNAME : %s ADDR : %lx PGSIZE : %06lx CODE : %s\n",label,pgname,staddress,length,cptr);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>else if(label=='T'){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>long objcode[CODESIZE]={0,};</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(address,cptr+LABELSIZE,ADDRESS_SIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>staddress=strtol(address,NULL,16);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(addres,cptr+LABELSIZE+ADDRESS_SIZE,LENGTH_SIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>length=strtol(addres,NULL,16);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cptr=cptr+LABELSIZE+ADDRESS_SIZE+LENGTH_SIZE;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("TAG : %c ADDR : %06lx SIZE : %lx CODE : ",label,staddress,length);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>for(i=0; i<10; i++){</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>strncpy(code,cptr,COD_SEL_SIZE);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>cptr=cptr+COD_SEL_SIZE;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>realcode=strtol(code,NULL,16);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>objcode[i]+=realcode;</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>printf("%06lx ",objcode[i]);</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}printf("\n");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}<span class="Apple-tab-span" style="white-space:pre;"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>}</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>fclose(rfd);<span class="Apple-tab-span" style="white-space:pre;"> </span>//srcfile파일을 닫음.</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>return 0;</div> <div>}</div></div> <div><br></div> <div><br></div> <div>살려주시와요 ㅠ.ㅠ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.