2013-05-31 2 views
3

제 입력 파일은 다음과 같습니다.입력에서 여러 유형을 읽는 방법?

00 READ 9 
01 READ 10 
02 WRIT 9 
03 LOAD 10 

난 단지 5 개 정수 변수를 사용할 수 있습니다 (같은 - REG1, REG2, REG3, REG4, reg5)와 해당 코드에 READ 같은 지침을 각 라인에서 읽고 변환 할 수 있고, 10

은 읽을 정보는과 같이 길이 (100) 그래서 처음 몇 줄 읽고 것의 정수 배열에 저장 및 변환되어 저장됩니다

0  1 2 
1009 1010 1109 
이것에 대해 이동하는 가장 좋은 방법이 될 것입니다 무엇

?

+0

다른 지시 사항에 해당하는 코드 무엇과 다른 지시 사항은 무엇입니까? 우리는 각 명령어 (어떤 숫자가 'LOAD'에 해당하는지)와 같은 코드를 어떻게 추측 할 수 있습니까? 또한 '5 정수'로 무엇을 의미합니까? 5 가지 지침이 있습니까? – Nobilis

+0

우리는 매우 기본적인 "어셈블리 컴파일러를 만들고 있습니다. 따라서 모든 명령과 해당 opcode를 나열하면 공간이 낭비됩니다. 나는 정수로 읽을 수있는 방법이나 알고리즘을 생각해 내는데 어려움을 겪고있다. 문자열을 읽고 opcode로 변환하고 마지막 정수를 읽고 파일의 끝에 도달 할 때까지 계속 진행한다. 모두 5 개의 정수 변수 만 사용합니다. – user1362058

+0

문자열 등을 사용할 수없는 경우 어떻게 READ 코드로 변환 하시겠습니까? 과제가 어떻게 주어 졌는지 묻는 것. 필자가 귀하의 파일에 지시 할 수있는 코드는 줄 번호와 읽을 값만 알려줍니다. – Nobilis

답변

0

알 수 있듯이 모든 니모닉은 4 바이트 직선입니다. 간단히 32 비트 정수를 할당하고 4 바이트를 읽는 데이터 읽기 루틴에 주소를 제공 할 수 있습니다. 그런 다음 "READ"가 1145128274, "WRIT"- 1414091351 등으로 바뀝니다. 문자열보다 비교하기가 훨씬 쉽습니다.

또는 다른 방법으로 모든 입력을 읽고 무릎 관절염에 대한 (int *) 포인터를 설정하십시오. 뭐 그런이 이것에 대해가는하지만 난 지침을 변환 할 수있는 다음 코드를 수행하는 함수를 호출 한 주소로 첫 번째 정수에서 읽은 후 가장 효율적인 방법 인 경우

char input[]="10 READ 09"; 
int* opcode = (int*)&input[3]; 
if(*opcode == 1145128274) // then it's READ 
0

나도 몰라 을 해당 정수 값으로 변환합니다.

코드 시작 부분에서 해당 값으로 명령을 설정하는 데 열거 형을 사용했습니다.

getchar(); 
*reg1 = (int)getchar(); 
*reg2 = (int)getchar(); 
*reg3 = (int)getchar(); 
*reg4 = (int)getchar(); 

switch(*reg1){ 
    case (int)'R': 
     if(*reg2 == (int)'E' && *reg3 == (int)'E' && *reg4 == (int)'D'){ 
      *reg4 = READ; 
      return 1; 
     }else{ 
      return 0; 
     } 
     break; 
    case (int)'W': 
     ... 

}

관련 문제