|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.01.2010, 20:10 | #1 |
Регистрация: 17.01.2010
Сообщений: 9
|
С++ лаба надо разобрать
const int table_size = 10;
struct asm_mnem{ char name[10]; int code; int type; }; enum { register const char *n; register crc32 hashval = 0xffffffff; for (n = name; *n; n++) hashval = (hashval >> 8) ^ consttab[(hashval ^ *n) & 0xff]; hashval ^= 0xffffffff; return (hashval & (HASH_TABLE_SIZE-1)); } int hentry[10000]; struct{ int next; int namepos; int data; }hlists[5000]; char hnames[20000]; int nhlists = 0; int nhnames = 0; int main(int agrc, char* argv[]){ char buf[1024]; char ch=' '; int i, j, k; int left, right, mid, cmp; int chain; int key; bool found; asm_mnem mnems[table_size]= { {"add",1,1}, {"and",2,2}, {"div",3,1}, {"jmp",4,3}, {"ldd",5,3}, {"mov",6,4}, {"mul",7,1}, {"or", 8,2}, {"sub",9,1}, {"xor",10,1} }; FILE *fmnem, *fout; if ((fmnem=fopen("asm.txt","r"))==NULL ){ printf("Can not open a file!\n"); exit(1); } if ((fout=fopen("out.txt","w"))==NULL) { printf("Can not open a file!\n"); exit(1); } for (i = 0; i<1000; i++) hentry[i] = -1; while (ch!=EOF){ for ( i=0; i<1024; i++){ buf[i] = ' ';} left = 0; right = table_size; i = 0; for (;{ ch = fgetc(fmnem); if (ch == '\n' || ch == EOF){ break;} buf[i] = ch; i++;} j = 0; while (isspace(buf[j])){ j++; } //j-begin of mnem; k = j; while (isalnum(buf[k])){ k++; } //k - end of mnem; buf[k] = 0; //cmp found=false; while (left<=right) { mid=(left+right)/2; cmp = stricmp(mnems[mid].name, buf+j); if (cmp==0){ found = true; break;} else if (cmp > 0){ right = mid-1;} else { left = mid+1;} } //end_of_cmp if (found){ fprintf(fout, "%s keyword, opcode = %d\n", buf+j, mnems[mid].code);} else { char *cand = buf+j; key = ComputeHashKey(cand); chain = hentry[key]; while (chain != -1){ char *name = hlists[chain].namepos+hnames; cmp = strcmp(cand, name); if (cmp == 0){ fprintf(fout, "%s old name, hash = %d\n", cand, key); break;}//if chain = hlists[chain].next; }//while if (chain == -1){ chain = hentry[key]; hlists[nhlists].next = chain; hlists[nhlists].namepos = nhnames; hlists[nhlists].data = 0; hentry[key] = nhlists; nhlists++; strcpy(hnames + nhnames, cand); nhnames+=strlen(cand)+1; fprintf(fout,"%s new name, hash = %d\n", cand, key); } }//else } //end_of_file_reading fclose(fmnem); fclose(fout); return 0; } |
17.01.2010, 20:15 | #2 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
я разобрал. что мне делать с разобраным? )))
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не могу разобрать с матрицами | svetlana891 | Помощь студентам | 4 | 18.06.2009 10:56 |
Помогите разобрать со String | MasterofCDM | Общие вопросы Delphi | 12 | 06.06.2009 14:53 |
помогите задачу разобрать | Настаська | Помощь студентам | 2 | 26.11.2008 16:16 |
Разобрать программу | DarkDeivel | Общие вопросы Delphi | 13 | 21.09.2008 14:17 |
Помогите разобрать прогу! | Mute | Общие вопросы C/C++ | 2 | 28.12.2006 11:34 |