|
외국 사이트에서 발견한 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;}
}
}
|