간단한 어셈블러 작성(리터럴,심블,가연산자 테이블 등 작성, 기계어 변환)
닫기
  • 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
해당 자료는 10페이지 까지만 미리보기를 제공합니다.
10페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

간단한 어셈블러 작성(리터럴,심블,가연산자 테이블 등 작성, 기계어 변환)에 대한 보고서 자료입니다.

목차

없음

본문내용

//////////////////////////////////////////////////////////////////////////
// //
// PASS1 //
// //
//////////////////////////////////////////////////////////////////////////

// 파일로 부터 한줄(카드)을 입력받아 배열에 구조체 LINE.str에 저장
// 저장된 카드를 label, OP, P1, P2 부분으로 나눔

void File_Read_Card(void)
{
FILE *fp;
fp=fopen("source.txt","r");

char ch;
int cnt_lab=0, cnt_op=0, cnt_pa1=0, cnt_pa2=0;
int cnt_str=0;

while((ch=getc(fp)) != EOF ) {
if(ch != '\n') {
CARD[count].str[cnt_str]=ch;
cnt_str++;
}
else
{
cnt_str=0;
count++;
}
}
count++;
cnt_str=0;

//////////////////////////////////////////////////////////////////
// 기계,가연산자 작업후, 레이블(심블)체크 및 Location Counter 증가
//////////////////////////////////////////////////////////////////

void LabelAndLC(int L, int position1, int position2)
{
if(CARD[position1].label[0] != NULL) { // 심블 처리
strcpy( SB_TB[cnt_sb].symbol, CARD[position1].label ) ;
SB_TB[cnt_sb].value = LC;

cnt_sb++; // 심볼 테이블 카운터 증가
}
// 넘어온 op가 MOT에서 넘어온 경우 심블의 길이와 재배치 가능성값을 새로 정의
if(mot_flag==1) {
void POT_Operation(int card_posi, int pot_posi)
{
int L=0;

if( !(strcmp(CARD[card_posi].op , "START")) ) {
SB_TB[cnt_sb].length = 1;
SB_TB[cnt_sb].relocation = 1;
LabelAndLC(L, card_posi, pot_posi);
}
if( !(strcmp(CARD[card_posi].op , "USING")) ) {
LabelAndLC(L, card_posi, pot_posi);
}
// DS, DC 형일 경우 Location Counter 값 할당
else if( !(strcmp(CARD[card_posi].op , "DS")) || !(strcmp(CARD[card_posi].op , "DC")) ) {
int tmp1=0,i=0;
char tmp2[10];
//////////////////////////////////////////////////////////////////
// 기계연산자 수행 작업
//////////////////////////////////////////////////////////////////

void MOT_Operation(int card_posi, int mot_posi)
{
int L=0;

L = MOT[mot_posi].length; // L <- 길이

if(CARD[card_posi].pa2[0] == '=') { // 리터럴을 처리, 테이블(구조체)에 넣는다.
LT_TB[cnt_lt].relocation = 1;
LT_TB[cnt_lt].length = 4;

strcpy( LT_TB[cnt_lt].symbol , CARD[card_posi].pa2 ) ;
cnt_lt++;
void Searching_POT_MOT(void)
{
char tmp[]="LTORG";
int flag=0, flag2=0, flag3=0;

for(int i=0;i // 가연산자 테이블 검색
// 검색되면 flag값이 1로 되어 다음 검색을 하지 않음
for(int j=0 ; j if( !strcmp(CARD[i].op, POT[j]) ) {
if(P1_OR_P2 == 0) // pass1에서 호출했는지 pass2에서 호출했는지 판별하는 구분
POT_Operation(i,j);
flag = 1;
break;
}
}
.
.
.
.
  • 가격2,000
  • 페이지수50페이지
  • 등록일2005.01.18
  • 저작시기2004.12
  • 파일형식압축파일(zip)
  • 자료번호#277479
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니