C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[59267] Re:간단한 C++ 소스 분석 좀 부탁드립니다.
김동현 [] 1228 읽음    2009-11-30 10:51
대부분의 어셈블러는 두개의 Pass로 제작이 됩니다.

Pass : 파일을 한번 읽는 것을 뜻합니다.

One Pass : 심볼의 정의 (아래의 소스에서는 배열로 정의 되었습니다.)
    char *p[9][4] =            //   배열
    {
        {"PRG1","START","",""},
        {"","USING","*","15"},
        {"","L","1","FIVE"},
        {"","A","1","FOUR"},
        {"","ST","1","TEMP"},
        {"FOUR","DC","F'4'",""},
        {"FIVE","DC","F'5'",""},
        {"TEMP","DS","1F",""},
        {"","END","",""}
    };

Two Pass : 위에 정의된 명령을 조립하고 출력을 하는 것을 이야기 합니다.

아래 소스에스는 해당 명령을 조립하고 출력을 하는 것이라고 생각 하시면 됩니다.

        for(i=0;i< 9;i++)
        {
            if(strcmp(p[i][1],"START")==0)
            {
                print(p[i][0],location_counter,1,'R');
            }
            else if(strcmp(p[i][0],"")!=0)
            {
            print(p[i][0],location_counter,4,'R');
            location_counter=4+location_counter;
            }
            else if(strcmp(p[i][1],"USING")==0)
            {}
            else{location_counter=4+location_counter;}
        }

---------------------------------------------------------------------------------------------

초딩밤톨 님이 쓰신 글 :
: 외국 사이트에서 발견한 two pass assembler라고 쓰여있는 C++소스입니다.
:
: 나름 이해 하려고 고민고민 해봤는데 대충 이런게 이런거구나 라고 생각은 되지만
: 정확하게 이해가 잘 안되네요. (특히 마지막에 for문)
:
: 아래 소스를 좀 자세하게 설명해주실 분 계신가요? ㅠㅠ
:
:
: #include<iostream>
: using namespace std;
:
: void print(char *p,int loc,int len,char ra)        // print함수
: {
:     cout << p << "\t" << loc << "\t" << len <<"\t" << ra << "\n";
: }
:
: void main()
: {
:
:     char *p[9][4] =            //   배열
:     {
:         {"PRG1","START","",""},
:         {"","USING","*","15"},
:         {"","L","1","FIVE"},
:         {"","A","1","FOUR"},
:         {"","ST","1","TEMP"},
:         {"FOUR","DC","F'4'",""},
:         {"FIVE","DC","F'5'",""},
:         {"TEMP","DS","1F",""},
:         {"","END","",""}
:     };
:
:     int i,j=0,location_counter=0;        // 변수선언
:
:
:     for (i=0;i< 9;i++)            // 선언한 배열을 화면에 표시
:     {
:         for(j=0;j< 4;j++)
:         {
:             cout << p[i][j] << "\t";
:         }
:         cout << "\n" ;                       
:     }
:
:         cout << "\n\n\n Symbol ";
:         cout << "Table:\nSYMBOL\tVALUE\tLENGTH\tRelocatable/Absolute\n" ;
:         cout << "---------------------------------------------\n";
:
:         for(i=0;i< 9;i++)
:         {
:             if(strcmp(p[i][1],"START")==0)
:             {
:                 print(p[i][0],location_counter,1,'R');
:             }
:             else if(strcmp(p[i][0],"")!=0)
:             {
:             print(p[i][0],location_counter,4,'R');
:             location_counter=4+location_counter;
:             }
:             else if(strcmp(p[i][1],"USING")==0)
:             {}
:             else{location_counter=4+location_counter;}
:         }
:
: }

+ -

관련 글 리스트
59264 간단한 C++ 소스 분석 좀 부탁드립니다. 초딩밤톨 1603 2009/11/30
59267     Re:간단한 C++ 소스 분석 좀 부탁드립니다. 김동현 1228 2009/11/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.