나는 아주 간단한 MIPS 프로세서에 대한 간단한 어셈블러를 만들려고합니다. 불행히도 C는 나에게 많은 문제를 일으켰습니다. 특히 strcasecmp
은 유효하거나 올바른 결과를 반환하지 않았습니다. 결과는 때로는 정확하지만 일반적으로 그렇지 않습니다. 그리고 나는 이것이 세상에서 왜 이런 경우가 될지 이해할 수 없습니다. 수정 제안 사항 외에 누군가가 이러한 오류가 발생하는 이유를 설명 할 수 있습니까?겉으로보기에는 무작위로 반환 값을
참고 나는이 오류가 레지스터 테이블을 전달할 것으로 생각하지 않는다고 생각합니다. 레지스터 테이블이 변환 레지스터 함수 내에서 선언 될 때 동일한 오류가 발생합니다.
감사합니다 !!!
레지스터 이름에 해당하는 값을 반환해야하는 함수. 은 main
에 선언되어 있습니다. 나는이 그래서를 통해 반복하고 main
int ConvertRegisterName(char * rname,REG_NAME_PAIR RegisterTable[32])
{
int i;
int j=0;
for (i=1; i<32; i++,i++)
{
if (!(strcasecmp(RegisterTable[i].reg_number,rname) & strcasecmp(RegisterTable[i].reg_name,rname)))
{
j=i;
return j;
break;
}
}
if(!j)
{
printf("Error with register name \n");
return j;
}
}
main
함수에서 테이블에있는 모든 레지스터 이름을 테스트 할 수 않았다
int main(int argc,char *argv[])
{
REG_NAME_PAIR RegisterTable[32];
RegisterTable[1].reg_name = "at";
RegisterTable[1].reg_number = "$1";
RegisterTable[2].reg_name = "v0";
RegisterTable[2].reg_number = "$2";
RegisterTable[3].reg_name = "v1";
RegisterTable[3].reg_number = "$3";
RegisterTable[4].reg_name = "a0";
RegisterTable[4].reg_number = "$4";
RegisterTable[5].reg_name = "a1";
RegisterTable[5].reg_number = "$5";
RegisterTable[6].reg_name = "a2";
RegisterTable[6].reg_number = "$6";
RegisterTable[7].reg_name = "a3";
RegisterTable[7].reg_number = "$7";
RegisterTable[8].reg_name = "t0";
RegisterTable[8].reg_number = "$8";
RegisterTable[9].reg_name = "t1";
RegisterTable[9].reg_number = "$9";
RegisterTable[10].reg_name = "t2";
RegisterTable[10].reg_number = "$10";
RegisterTable[11].reg_name = "t3";
RegisterTable[11].reg_number = "$11";
RegisterTable[12].reg_name = "t4";
RegisterTable[12].reg_number = "$12";
RegisterTable[13].reg_name = "t5";
RegisterTable[13].reg_number = "$13";
RegisterTable[14].reg_name = "t6";
RegisterTable[14].reg_number = "$14";
RegisterTable[15].reg_name = "t7";
RegisterTable[15].reg_number = "$15";
RegisterTable[16].reg_name = "s0";
RegisterTable[16].reg_number = "$16";
RegisterTable[17].reg_name = "s1";
RegisterTable[17].reg_number = "$17";
RegisterTable[18].reg_name = "s2";
RegisterTable[18].reg_number = "$18";
RegisterTable[19].reg_name = "s3";
RegisterTable[19].reg_number = "$19";
RegisterTable[20].reg_name = "s4";
RegisterTable[20].reg_number = "$20";
RegisterTable[21].reg_name = "s5";
RegisterTable[21].reg_number = "$21";
RegisterTable[22].reg_name = "s6";
RegisterTable[22].reg_number = "$22";
RegisterTable[23].reg_name = "s7";
RegisterTable[23].reg_number = "$23";
RegisterTable[24].reg_name = "t8";
RegisterTable[24].reg_number = "$24";
RegisterTable[25].reg_name = "t9";
RegisterTable[25].reg_number = "$25";
RegisterTable[26].reg_name = "k0";
RegisterTable[26].reg_number = "$26";
RegisterTable[27].reg_name = "k1";
RegisterTable[27].reg_number = "$27";
RegisterTable[28].reg_name = "gp";
RegisterTable[28].reg_number = "$28";
RegisterTable[29].reg_name = "sp";
RegisterTable[29].reg_number = "$29";
RegisterTable[30].reg_name = "fp";
RegisterTable[30].reg_number = "$30";
RegisterTable[31].reg_name = "ra";
RegisterTable[31].reg_number = "$31";
int i;
for (i=1; i<32; i++)
{
printf("i is %d\n",i);
printf("Register Name is %s \n" ,RegisterTable[i].reg_name);
printf("this is the return value %d",ConvertRegisterName(RegisterTable[i].reg_name,RegisterTable));
printf("\n");
printf("Register Number %s\n",RegisterTable[i].reg_number);
printf("this is the return value %d",ConvertRegisterName(RegisterTable[i].reg_number,RegisterTable));
printf("\n");
printf("\n");
}
}
REG_NAME_PAIR
구조체
typedef struct
{
char *reg_name;
char *reg_number;
} REG_NAME_PAIR;
'i ++, i ++'를 말합니까? –
&& –
이 코드는 완전히 혼란 스럽습니다. 같은 "name"인수를'reg_name' * 및 * 또한'reg_number'와 비교하는 이유는 무엇입니까? –