→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Обьясните ка прога работает и где какой блок находиться 
Автор Сообщение
Начинающий

Регистрация: 17.01.2010
Сообщения: 3

Репутация: 0 [ ? ]
Сообщение Обьясните ка прога работает и где какой блок находиться
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
//---------------------------------------------------------------------------
const int table_size = 10;
struct asm_mnem{
char name[10];
int code;
int type;
};
enum {
HASH_TABLE_SIZE = 1024
};
static unsigned int ComputeHashKey(const char name[])
{
typedef unsigned int crc32;
static const crc32 consttab[] = {
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,

0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,

0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,

0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,

0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,

0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,

0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,

0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
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 18:05
Профиль Отправить email
Мастер

Регистрация: 26.12.2009
Сообщения: 154
Откуда: Kiev
Языки:
Специальность:

Репутация: 7 [ ? ]
Сообщение Re: Обьясните ка прога работает и где какой блок находиться
Транслятор под ассемблер

_________________
yaroslav91@gmail.com


17.01.2010 18:20
Профиль Отправить email ICQ
Начинающий

Регистрация: 17.01.2010
Сообщения: 3

Репутация: 0 [ ? ]
Сообщение Re: Обьясните ка прога работает и где какой блок находиться
мне надо где какая стока и за шо отвечает

Добавлено спустя 48 секунд:
нет это распознавание ключевых команд
но мне надо раздуплить её


17.01.2010 19:02
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»