亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pcasm5b.c

?? 這是8位微處理器的Verilog源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
void find_mnemonic(FILE *fp_opcode,              \
			 unsigned char *line_buffer,   \
			 unsigned int length,          \
			 unsigned int mnemonic_lines,  \
			 unsigned int *result_buffer,
			 FILE *list_fp)
{
  int      i,j,k,t,p, reg, mnem_char, theword_len, qq;
  int      status;
  char     mnemonic[BL], mode, theword[BL];
  unsigned char *ptr, c, label_found;
  unsigned int opcode,match, immed;
  unsigned char immed_result[3];

  rewind(fp_opcode); // rewind opcode.dat file pointer to top
  status=0;

  // get next word from current line
  ptr=0;
  theword_len=find_word(line_buffer,&ptr,length,theword);

  // if current sourece code line contains 'end', we've reached end of source
  // code file, so exit out
  if((theword[0]=='E'&&theword[1]=='N'&&theword[2]=='D') || \
     (theword[0]=='e'&&theword[1]=='n'&&theword[2]=='d')   )
    return;

  // does this word cotain ':' ?, if so, we're looking at a
  // label and we want to skip over to next word
  for(i=0,label_found=0;i<theword_len;i++)
    if((c=theword[i])==':')
	 label_found=1;

  if (label_found==1)         // if label found, skip to next word
    theword_len=find_word(line_buffer,&ptr,length,theword);

  if(theword_len==0)          // if this new word is empty, no opcode here, exit
  { result_buffer[0]=1 | (label_found<<7);
    return;
  }

  for(j=0;j<mnemonic_lines;j++)
    {
	// clear mnemonic buffer
	for(k=0;k<BL;k++) mnemonic[k]=NULL;

	// load next mnemonic i.e. next line from opcode.dat
	fscanf(fp_opcode,"%s %d %x %c",mnemonic,&mnem_char,&opcode,&mode);

	// if mnemonic I read from opcode.dat is 'END' then entire table
	// has been search, so exit
	if ( (mnemonic[0]=="E")&&(mnemonic[1]=="N")&(mnemonic[2]=="D") )
	 return;

	// scan through the line_buffer looking for matches
	for(i=0,t=0,match=0;i<BL;i++)
	{ if((theword[t]==mnemonic[i]) || ((theword[t]-0x20)==mnemonic[i]))
	    t++;
	  else t=0;
	}

	// *** Matching opcode found ***
	if (t!=0)
	{ match=1;
	  break; // break out of the for loop
	}
    }

    if(match==1)
    {
	/*
	** UNARY OPCODE
	*/
	if( (match==1) && (mode=='U') )
	{
	  result_buffer[0]   = 0 | (label_found<<7); // opcode found and no error
	  result_buffer[1]   = 1;
	  result_buffer[2]   = opcode;
	  fprintf(list_fp,"** unary opcode found\n");
	  //rintf(list_fp,"\t %x\n",result_buffer[2]);
	  return;
	}

	/*
	** REGISTER DIRECT OPCODE, search for valid register
	*/
	if( (match==1) && (mode=='R') )
	{
	  fprintf(list_fp,"** register direct opcode found ");

	  // scan through the rest of line looking for valid reg name
	  // get next word.. hopeflly it is a valid reg name
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  reg=find_reg(fp_opcode,mnemonic_lines,theword);
	  #ifdef debug
		if (reg==-1) fprintf(list_fp,"** error reg not found\n");
		else fprintf(list_fp,"** reg found\n");
	  #endif

	  if(reg==-1) // valid opcode found, but there was error
		result_buffer[0]  = 2 | (label_found<<7);
	  else
	  {   result_buffer[0]      = 0 | (label_found<<7);
		result_buffer[1]      = 1;
		result_buffer[2]      = (opcode & 0xf8) | (reg & 0x07);
		i = (unsigned int) *(result_buffer+1);     // debug purpose
	  }
	  //fprintf(list_fp,"\t %x\n",result_buffer[2]);
	  return;
	}

	/*
	** (acc) IMMEDIATE OPCODE, search for valid data
	*/
	if( (match==1) && (mode=='I') )
	{
	  fprintf(list_fp,"** (acc) immediate opcode found ");

	  // scan through the line seraching for valid immediate value
	  // get next word.. hopeflly it is a valid immediate
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  find_immed(theword,theword_len,MODE_BYTE,immed_result);
	  if(immed_result[0]==0)
	  {
	    fprintf(list_fp," immed found \n");
	    result_buffer[0]    =0 | (label_found<<7);
	    result_buffer[1]    =2;
	    result_buffer[2]    =opcode;
	    result_buffer[3]    =immed_result[1];

	    //fprintf(list_fp,"\t %x %x\n",result_buffer[2],result_buffer[3]);
	    return;

	  }
	  else
	  {
	    fprintf(list_fp," err with immed \n");
	    result_buffer[0]    =2|(label_found<<7);
	    return;
	  }
	}

	/*
	** (reg) IMMEDIATE OPCODE, search for valid reg
	**                         search for valid data
	**/
	if( (match==1) && (mode=='A') )
	{
	  fprintf(list_fp,"** (reg) immediate opcode found ");

	  // scan through the rest of the line to find valid reg
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  reg=find_reg(fp_opcode,mnemonic_lines,theword);
	  #ifdef debug
		if (reg==-1) fprintf(list_fp,"** error reg not found\n");
		else fprintf(list_fp,"** reg found ");
	  #endif
	  if(reg==-1)
	  { result_buffer[0] = 2 | (label_found<<7); //opcode has invalid register
	    return;
	  }

	  // scan through the line seraching for valid immediate value
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  find_immed(theword,theword_len,MODE_BYTE,immed_result);
	  if(immed_result[0]==0)
	  {
	    fprintf(list_fp," immed found \n");
	    result_buffer[0]    =0 | (label_found<<7);
	    result_buffer[1]    =2;
	    result_buffer[2]    =(opcode & 0xc7) | ( (reg & 0x07) <<3 );
	    result_buffer[3]    =immed_result[1];

	    //fprintf(list_fp,"\t %x %x\n",result_buffer[2],result_buffer[3]);
	    return;
	  }
	  else
	  {
	    fprintf(list_fp," err with immed \n");
	    result_buffer[0]    =2 | (label_found<<7);  // error with immediate value
	    return;
	  }

	}


	/*
	** (memory) DIRECT OPCODES, serach for valid reg
	**                        , search for valid addx
	**
	*/
	if( (match==1) && (mode=='D') )
	{
	  fprintf(list_fp,"** (mem) direct opcode found ");

	  // scan through the rest of the line to find valid reg
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  reg=find_reg(fp_opcode,mnemonic_lines,theword);
	  #ifdef debug
		if (reg==-1) fprintf(list_fp,"** error reg not found\n");
		else fprintf(list_fp,"** reg found ");
	  #endif
	  if(reg==-1)
	  { result_buffer[0] = 2 | (label_found<<7); //opcode has invalid register
	    return;
	  }

	  // scan through the line seraching for valid addx
	  theword_len=find_word(line_buffer,&ptr,length,theword);
	  find_immed(theword,theword_len,MODE_ADDX,immed_result);
	  if(immed_result[0]==0)
	  {
	    fprintf(list_fp," addx found \n");
	    result_buffer[0]    =0 | (label_found<<7);
	    result_buffer[1]    =3;
	    result_buffer[2]    =(opcode & 0xF8) | (reg & 0x07);
	    result_buffer[3]    =immed_result[1];
	    result_buffer[4]    =immed_result[2];

	    //fprintf(list_fp,"\t %x %x %x\n",result_buffer[2],result_buffer[3], \
			result_buffer[4]);
	    return;
	  }
	  else
	  {
	    fprintf(list_fp," err with addx \n");
	    result_buffer[0]    =2|(label_found<<7);  // error with addx value
	    return;
	  }

	}

	/*
	** BRANCHING OPCODE, search for valid address
	**
	*/
	if( (match==1) && (mode=='B') )
	{
	 fprintf(list_fp,"** branching opcode found ");

	 // get next word
	 theword_len=find_word(line_buffer,&ptr,length,theword);

	 // if this word does not contain '#' then, it is considered
	 // as a label
	 for(i=0,qq=0;i<theword_len;i++)
	  if((c=theword[i])=='#')
	    qq=1;

	 if(qq==0)
	 {
	   fprintf(list_fp,"label found \n");
	   result_buffer[0]    =3|(label_found<<7);   //branching opcode w/ label found
	   result_buffer[1]    =3;
	   result_buffer[2]    =opcode;
	   result_buffer[3]    =0;
	   result_buffer[4]    =0;

	   result_buffer[5]    =theword_len;   // lenght of label
	   for(i=0;i<theword_len;i++)          // on the rest of result_buffer
	   {  result_buffer[i+6] = theword[i];  // copy the label
		c=(unsigned char)result_buffer[i+6];  // debug
	   }
	 }
	 else
	 {
	  find_immed(theword,theword_len,MODE_ADDX,immed_result);
	  if(immed_result[0]==0)
	  {
	    fprintf(list_fp," addx found \n");
	    result_buffer[0]    =0|(label_found<<7);
	    result_buffer[1]    =3;
	    result_buffer[2]    =opcode;
	    result_buffer[3]    =immed_result[1];
	    result_buffer[4]    =immed_result[2];
	  }
	 }

	 //fprintf(list_fp,"\t %x %x %x\n",result_buffer[2],result_buffer[3], \
		    result_buffer[4]);
	 return;
     }


//	 fprintf(list_fp,"\n");
   }
   else
   {
     fprintf(list_fp,"no match\n");
     result_buffer[0]=1|(label_found<<7);  // no opcode found, but no error
   }

   // clear mnemonic buffer
   for(k=0;k<7;k++)
   mnemonic[k]=NULL;



}


/*
** int find_reg( )
**
** search through the "line_buffer" looking for a
** valid register.
**
** input:
**          FILE          *fp_opcode      file pointer to opcode.dat
**          unsiigned int mnemonic_line   line count from opcode.dat
**          unsigned char *theword        pointer to word buffer
**
** output:
**          -1    : no match found
**          0     : found 'ACC'  or 'acc'
**          1     : found 'AX'   or 'ax'
**          2     : found 'BX'   or 'bx'
**          4     : found 'FLAG' or 'flag'
**          5     : found 'PORT' or 'port'
**
**
**
*/
int find_reg(FILE *fp_opcode,             \
		 unsigned int mnemonic_line,  \
		 unsigned char *theword        )

{
 FILE *fp_opcode_save;
 int t,i,j,k,match,opcode,mnem_char;
 unsigned char mnemonic[BL],mode;


 rewind(fp_opcode);

 for(i=0,match=0;i<mnemonic_line;i++)
 {
    // clear mnemonic buffer
    for(k=0;k<BL;k++) mnemonic[k]=NULL;

    // load next mnemonic i.e. next line from opcode.dat
    fscanf(fp_opcode,"%s %d %x %c",mnemonic,&mnem_char,&opcode,&mode);

    // if mnemonic I read from opcode.dat is 'END' then entire table
    // has been search, so break out of loop
    if ( (mnemonic[0]=='E')&&(mnemonic[1]=='N')&&(mnemonic[2]=='D') )
     break;

    // scan through the line_buffer looking for matches
    for(i=0,t=0,match=0;i<BL;i++)
    { if((theword[t]==mnemonic[i]) || ((theword[t]-0x20)==mnemonic[i]))
	  t++;
	  else t=0;
    }

    // if match found, immediately break out of the for loop
    if(t!=0)
	break;

 }

 if(t!=0) return(opcode);
 else return(-1);


}


/*
** void find_immed
**
** see if the literal characters in 'theword' buffer is a valid
** number representation, if so convert it to binary and
** exit
**
** inputs:  unsigned char *theword        buffer containing literal chars
**          unsigned int  theword_len     length of the literal chars
**          unsigned int  mode            mode=0
**                                              expecting 8 bit data
**                                              expecting 12 bit addx
**          unsigned char immed_result    pointer to result array
**
**
** output:  int *immed_result              result array
**
**          immed_result[0]               status
**                      0     succesful
**                      1     out of range
**                      2     not valid number,
**                                  missing # or
**                                  missing radix or
**                                  has non-numerical chars
**          immed_Result[1-2] data: lsb, msb
**
*/
void find_immed(unsigned char *theword,    \
		    unsigned int  theword_len, \
		    unsigned int  mode,        \
		    unsigned char *immed_result            )
{
	int               i,j,k,found_radix,found_num;
	unsigned char     c;
	unsigned int      temp,x,y;

  // See if the literal number is correct
	// see if the number sign and radix are present
	if( theword[0]!='#'|| \
	    (theword[theword_len-1]!='h' && theword[theword_len-1]!='H') )
	{ immed_result[0] = 2;
	  return;
	}

     // see if there are bogus characters != (0-9, a-f)
     for(i=1;i<(theword_len-1);i++)
     { c=theword[i];
	 if( (c<'0') || ((c>'9')&&(c<'A')) || ((c>'F')&&(c<'a')) || \
	     (c>'f') )
	 { immed_result[0]=2;
	   return;
	 }
     }

     // convert the ASCII to numbers
     for(i=1;i<(theword_len-1);i++)
     { c=theword[i];
	 if( (c>='0')&&(c<='9') )
	  theword[i]=(unsigned int)theword[i]-0x30;
	 else if( (c>='A')&&(c<='F') )
	  theword[i]=theword[i]-0x37;
	 else if( (c>='a')&&(c<='f') )
	  theword[i]=theword[i]-0x57;
	 x=theword[i];
     }

     // check for overrange
     temp=0;
     for(i=1;i<(theword_len-1);i++)
     {//  temp += theword[i] * pow(16,(theword_len-2-i)) ;
	x=theword[i];
	y=theword_len;
	y=y-2;
	y=y-i;
	y=pow(16,y);
	x=x * y;
	temp=temp+x;
     }
     if( ((mode==0)&&(temp>(pow(2,8)-1)))||((mode==1)&&(temp>(pow(2,12)-1))) )
     { immed_result[0] = 1;
	 return;
     }


  // if no more errors let's do some work
     if(mode==0)
     { immed_result[0] = 0;
	 immed_result[1] = temp;
	 return;
     }

     if(mode==1)
     { immed_result[0] = 0;
	 immed_result[1] = temp%256;
	 immed_result[2] = temp/256;
	 x=immed_result[1];
	 y=immed_result[2];
	 return;
     }
}


/*
** void find_word( )
**
** given a buffer, extract a "word" surrounded by delimeters
** delimeters can be commas, space, tabs or newline
** 'theword' buffer is converted to all caps.
**
** input:   unsigned char  *buffer   pointer to the buffer, must be
**                                   null terminated
**          unsigned int   *buff_ptr starting location in the buffer
**          unsigned int   buffer_len length of the buffer
**          unsigned char  *word     pointer to the word buffer where
**                                   the found word will be dumped
**
** output:  o *buff_ptr will be updated to where it last found the word
**             delimiter
**          o buffer 'word' will have the NULL terminated word
**            the 'word' buffer will be empty if there was no delimeter
**            in the buffer given to scan or if the given buffer has
**            length of zero
**
**
*/
int find_word( unsigned char *buffer,    \
		   unsigned int  *buff_ptr,  \
		   unsigned int  buffer_len, \
		   unsigned char *theword )
{
  int i,t,ena;
  unsigned char c,c2;

  // clear 'theword' buffer
  for(i=0;i<BL;i++)
    *(theword+i)=NULL;


  // advance the buffer pointer until no delimiter is found
  i=0; c=buffer[*buff_ptr+i];
  while((c==' ')||(c=='\t')||(c==CR)||(c==','))
  {  i++;
     c=buffer[*buff_ptr+i];
  }
  *buff_ptr=*buff_ptr+i;

  // go through the line_buffer and extract a word
  // rules: start when beginning of buffer or blank or tab is found
  //        end   when end of buffer or blank or tab is found
  i=0;
  while((c!=NULL)&&(c!=' ')&&(c!='\t')&&(c!=NL)&&(c!=',')&&((*buff_ptr+i)!=buffer_len))
  {  c=buffer[*buff_ptr+i];
     theword[i]=c;
     i++;
  }

  if((*buff_ptr+i)==buffer_len)
  { *buff_ptr=*buff_ptr+i;
    theword[i]=NULL;
    return(i);
  }
  else
  { *buff_ptr=*buff_ptr+i-1;
    theword[i-1]=NULL;
    return(i-1);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久蜜臀 | 久草这里只有精品视频| 精品一区二区三区av| 日本韩国一区二区三区视频| 精品日本一线二线三线不卡| 日韩免费视频一区二区| 久久国产尿小便嘘嘘| 91网站最新地址| 欧美成人国产一区二区| 亚洲一二三区在线观看| www.久久久久久久久| 国产视频一区在线播放| 青草av.久久免费一区| 日本精品免费观看高清观看| 日本一区二区视频在线观看| 久久99久久久欧美国产| 欧美精品xxxxbbbb| 亚洲第一av色| 欧美日韩国产bt| 一区二区三区欧美在线观看| caoporn国产精品| 久久久久久久久久久久久女国产乱| 青娱乐精品在线视频| 欧美日韩免费不卡视频一区二区三区| 亚洲欧美色一区| 在线看国产日韩| 亚洲国产日韩精品| 欧美理论电影在线| 日韩中文欧美在线| 欧美一级爆毛片| 美女免费视频一区| 久久女同性恋中文字幕| 国产老肥熟一区二区三区| 久久久综合九色合综国产精品| 精品一二三四区| 国产婷婷色一区二区三区 | 亚洲一区在线观看免费| 欧美在线观看视频一区二区三区| 一区二区三区成人| 欧美区在线观看| 久久精品国产99国产精品| 欧美电影免费观看高清完整版在线| 久久成人18免费观看| 久久免费电影网| www.亚洲人| 亚洲成人av福利| 欧美成人伊人久久综合网| 国精产品一区一区三区mba桃花| 久久久美女艺术照精彩视频福利播放| 国产福利精品导航| 亚洲视频一区二区在线观看| 欧美日韩日日夜夜| 国产另类ts人妖一区二区| 亚洲三级电影网站| 91精品国产综合久久福利| 老司机精品视频线观看86| 午夜影院久久久| 国精品**一区二区三区在线蜜桃| 久久午夜电影网| 色婷婷一区二区| 激情av综合网| 亚洲特黄一级片| 日韩欧美一二三四区| jizzjizzjizz欧美| 毛片一区二区三区| 偷拍一区二区三区四区| av在线播放不卡| 一区二区三区在线观看动漫| 9191久久久久久久久久久| 激情伊人五月天久久综合| 成人免费一区二区三区视频| 欧美一区二区三区成人| 国产91丝袜在线播放| 午夜国产不卡在线观看视频| 国产亚洲欧美日韩在线一区| 欧美性做爰猛烈叫床潮| 国产成人亚洲综合a∨婷婷图片| 一卡二卡欧美日韩| 国产性天天综合网| 日韩免费一区二区| 91网站黄www| 国产一区欧美一区| 天天操天天色综合| 免费日本视频一区| 91精品国产综合久久香蕉麻豆| 国产精品亚洲一区二区三区在线| 亚洲国产精品影院| 国产精品久久久久久久第一福利 | 精品国产网站在线观看| 欧美日韩综合色| 成人激情小说网站| 国产成人免费视频精品含羞草妖精| 亚洲va韩国va欧美va| 亚洲欧洲99久久| 欧美激情一二三区| 久久午夜电影网| 欧美va亚洲va国产综合| 欧美日韩精品一区二区天天拍小说| 成人av资源站| 国产传媒日韩欧美成人| 九九精品视频在线看| 日韩精品三区四区| 午夜日韩在线电影| 性欧美大战久久久久久久久| 亚洲少妇最新在线视频| 国产精品乱码妇女bbbb| 国产婷婷色一区二区三区四区 | 欧美一区二区在线视频| 欧美精品高清视频| 欧美日韩情趣电影| 欧美高清一级片在线| 欧美色涩在线第一页| 欧美日本韩国一区二区三区视频 | 日本中文一区二区三区| 亚洲主播在线播放| 亚洲国产一区二区视频| 一区二区三区四区五区视频在线观看 | 欧美日韩国产综合一区二区三区| 在线精品视频免费播放| 欧美日韩国产精品成人| 欧美一区二区在线不卡| 久久久久国产一区二区三区四区 | 亚洲国产精品二十页| 欧美激情一二三区| 亚洲欧美日韩国产一区二区三区| 亚洲色图20p| 日韩国产在线观看| 精品无人码麻豆乱码1区2区 | 韩国精品主播一区二区在线观看| 久久电影网站中文字幕| 国产精品一二三四| 99久久免费精品高清特色大片| 色www精品视频在线观看| 欧美日韩一区二区三区四区五区| 欧美高清视频www夜色资源网| 欧美一级日韩免费不卡| 精品国产自在久精品国产| 国产亚洲制服色| 亚洲欧美乱综合| 免费xxxx性欧美18vr| 国产激情一区二区三区| 91麻豆精东视频| 日韩三级中文字幕| 国产精品免费观看视频| 亚洲一区二区三区四区在线观看 | 久久久蜜臀国产一区二区| 中文字幕亚洲综合久久菠萝蜜| 亚洲一级在线观看| 精品中文字幕一区二区| 97久久超碰精品国产| 91麻豆精品国产91久久久久| 亚洲国产精品传媒在线观看| 三级亚洲高清视频| 高清在线观看日韩| 欧美猛男超大videosgay| 久久久久久久久97黄色工厂| 亚洲香肠在线观看| 国产sm精品调教视频网站| 欧美久久一二区| 亚洲欧洲在线观看av| 日韩电影在线观看电影| 成人a区在线观看| 91精品国产高清一区二区三区| 国产日韩欧美精品在线| 亚洲综合色噜噜狠狠| 国产真实乱偷精品视频免| 日本乱人伦一区| 欧美极品少妇xxxxⅹ高跟鞋| 水野朝阳av一区二区三区| 懂色av噜噜一区二区三区av| 欧美一区欧美二区| 伊人色综合久久天天人手人婷| 国产麻豆精品在线观看| 欧美一区二区三区四区视频| 亚洲精品欧美专区| 东方欧美亚洲色图在线| 久久综合成人精品亚洲另类欧美| 亚洲国产中文字幕在线视频综合| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 色999日韩国产欧美一区二区| 国产亚洲精品超碰| 蜜桃传媒麻豆第一区在线观看| 欧美亚洲国产一卡| 亚洲人成影院在线观看| 成人手机在线视频| 国产视频一区二区三区在线观看| 蜜桃视频一区二区三区在线观看| 欧美中文字幕亚洲一区二区va在线 | 成人国产精品免费观看动漫| 欧美mv日韩mv国产网站| 日韩高清一区二区| 9191国产精品| 日本不卡视频在线| 日韩欧美亚洲国产精品字幕久久久| 日韩精品一区第一页| 3d成人动漫网站| 青青草成人在线观看| 91麻豆精品国产91久久久久 | 91精品国产综合久久久久久| 亚欧色一区w666天堂|