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

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

?? masmber_c6.cpp

?? 單片機宏匯編器的源程序。給一些愛好者作為學習編譯原理和 C 程序設計的例子.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//---------------------------------------------------------------------------
//-------- MAsmber_C6.cpp ---------------------------------------------------
//---------------------------------------------------------------------------

#include "MAsmber_H.h"
#include "AsmF_H.h"
#include "OBJfile_H.h"
#include "ListFile_H.h"
#include "OBJModule_H.h"
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
//
//                      控制匯編的指令處理群
//
//---------------------------------------------------------------------------
#define DebugKit(str)    DebugMsg(str)
//---------------------------------------------------------------------------
// 從字串str中取出數字放入val。遇到數字后面的','自動去除。
// str受影響。報錯時,需要使用Ln。
// err = 0: ok;        err = 1: error; 不是數串       err = 255: end。
//---------------------------------------------------------------------------
ERR MacroAsmber::FetchVal(int32u &val, Jstring &str)
{ val = 0;
  char* behind;     int16u len;
  char ss[256];
  Jassert(str.getLen()<255);

  const char* aNumWord = GetNumWord(str.makeStr(ss), len, behind); // 到字串str里找一個數字或單詞。
     // 如果是單詞和數開頭,返回一個指向串中第一個單詞和數的指針。
     // len返回單詞長度, behind指向單詞后一個字符。
     // 不是單詞和數開頭,則返回NULL。len=0,behind指向文本行中的第一個可見符或者行末。
    if(aNumWord != NULL)
     // Now, 得到了一個單詞和數
     { Jstring ts(aNumWord,len);
       if( ts.ValueStrToValue(val) )  // val 帶值返回。
        { if(*behind == ',') { ++behind; } // endif

          str = behind;    // !! 此處修改了str!
          return OK_no_Err;
        } // endif
       else // 不是數串
        { OutputErr(ArguExcevErr); return Have_Errs; } // end else
     } // endif
    else
     { return 255; } // end else
} // end FetchVal
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 根據輸入的字串str提取參數,設置REGISTERBANK。
//---------------------------------------------------------------------------
ERR MacroAsmber::RegBank_Do(Jstring &str)  // 注意, 這里是傳引用!
{ if( str.IsEmpty() )
   { OutputErr(ArguInsufErr); return Have_Errs; } // endif
  JModulePt->NoRegBank();

  ERR err; int8u i;
  for( i = 0; i < 4; ++i )
   { register int32u val;
     err = FetchVal(val, str);  // val, str 帶值返回。
     if(err) { break; } // endif  break from for i
     if(val > 3)
      { OutputErr(UsingWrongErr); return Have_Errs; } // endif
     JModulePt->setUseBank((int8u)val);    // 對RegBank進行設置。
   } // end for
  if(err == 255) { err = OK_no_Err; } // endif
  if( str.IsNotEmpty() )
   { OutputErr(ArguExcevErr); err = Have_Errs; } // endif
  return err;
} // end RegBank_Do
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
ERR MacroAsmber::Date_Do(Jstring &str)  // 注意, 這里是傳引用!
{ int32u val[3];

  ERR err; int8u i;
  for( i = 0; i < 3; ++i )
   { err = FetchVal(val[i], str);  // val, str 帶值返回。
     if(err) { break; } // endif  break from for i
   } // end for
  if(err == 255) { err = OK_no_Err; } // endif
  if(err) { return err; } // endif
  if( str.IsNotEmpty() )
   { OutputErr(ArguExcevErr); return Have_Errs; } // endif
  // Now, no error. Set the date.
  if(val[0]>=100 && val[1]<=12 && val[2]<=31 )
   { LstFilePt->jdate.year  = val[0];
     LstFilePt->jdate.month = val[1];
     LstFilePt->jdate.day   = val[2];
     return OK_no_Err;
   } // endif
  if(val[0]<=31 && val[1]<=12)
   { LstFilePt->jdate.day   = val[0];
     LstFilePt->jdate.month = val[1];
     LstFilePt->jdate.year  = val[2];
     return OK_no_Err;
   } // endif
  OutWarning(NumOutRangeWarn);
  return OK_no_Err;
} // end Date_Do
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
#define ItisWrong_BeSkip(p)   (p)->Token2 = Dog_Skip; pt = pt->next;
//---------------------------------------------------------------------------
// 測試所帶參數是否為空。為使報錯時該行存在,所以節點不能刪除。
//---------------------------------------------------------------------------
#define EmptyThenWarn(p,warn)                                                   \
         if((p)->Name.IsEmpty())                                                \
          { OutWarning(warn); ItisWrong_BeSkip(p); break; }
//---------------------------------------------------------------------------
#define TestConflictAndSet(bn,p);                                               \
         if(bn) { OutputErr(CtrlConflictErr); ItisWrong_BeSkip(p); break; }     \
         (bn) = true;
//---------------------------------------------------------------------------
#define DoneAndRemoveItBreak();                                                 \
         TokenOper::DelTokenNode(pt->next); break;
//---------------------------------------------------------------------------
#define MajorCtrlSolution(bn,p,statements)                                      \
                    TestConflictAndSet(bn,p);                                   \
                    statements                                                  \
                    DoneAndRemoveItBreak();
//---------------------------------------------------------------------------
#define Do_If_err_Break(statement)                                              \
                     err = statement;                                           \
                     if(err) { ItisWrong_BeSkip(p); break; }
//---------------------------------------------------------------------------
// 首要匯編控制指令語法分析器。(其參數就在Name域中。)
//---------------------------------------------------------------------------
ERR MacroAsmber::MajorCtrlParse(AsmLine* &line)
{ ERR err = OK_no_Err;
                      // printf("\n\n\n $Major control here.\n\n");
  Tokenfield* pt;
  for( pt = line->head; pt->next; )      // 一個接一個Token分析。
  { register Tokenfield* p = pt->next;   // p是當前分析的Token,pt是p的上一個。

    if(p->Token != Dog_Ctrl)
     { OutputErr(DogCtrlIllErr); err = Have_Errs; break; } // endif

    switch(p->Token2)
    { case DEBUG_Tn  :
       { MajorCtrlSolution(xBn.db_bn, p, JModulePt->SetDebug(true); ); } // end case
      case NODEBUG_Tn:
       { MajorCtrlSolution(xBn.db_bn, p, JModulePt->SetDebug(false); ); } // end case

      case RB_Tn     :
       { MajorCtrlSolution(xBn.rb_bn, p, Do_If_err_Break( RegBank_Do(p->Name) ) ); } // end case
      case NORB_Tn   :
       { MajorCtrlSolution(xBn.rb_bn, p, JModulePt->NoRegBank(); ); } // end case

      case NOMOD51_Tn:
       { MajorCtrlSolution(xBn.mo_bn, p, SFR51 = false; ); } // end case
      case MOD51_Tn  :
       { MajorCtrlSolution(xBn.mo_bn, p, SFR51 = true; ); } // end case

      case TITLE_Tn  : { TestConflictAndSet(xBn.tt_bn,p); // 沖突測試。
                         EmptyThenWarn(p,MissTitleWarn); // 有錯,不刪除節點。
                         LstFilePt->Title = p->Name; // 列表文件的標題改為TITLE!
                         DoneAndRemoveItBreak();
                       } // end case

      case DATE_Tn   : { TestConflictAndSet(xBn.da_bn,p); // 沖突測試。
                         EmptyThenWarn(p,MissDateWarn); // 有錯,不刪除節點。
                         Do_If_err_Break( Date_Do(p->Name) )
                         DoneAndRemoveItBreak();
                       } // end case

      case ERR_PR_Tn :
       { TestConflictAndSet(xBn.ep_bn,p); ErrPrint = true;
         EpFile.SetEPfile(err, p->Name);
         if(err) { OutputErr(spFileOpenErr); ItisWrong_BeSkip(p); } // endif
         else { TokenOper::DelTokenNode(pt->next); } // end else
         break;
       } // end case

      case NO_EP_Tn  :
       { MajorCtrlSolution(xBn.ep_bn, p, ErrPrint = false; ); } // end case

      case OBJOJ_Tn  :
       { MajorCtrlSolution(xBn.oj_bn, p, ObjFile = true;
          if(p->Name.IsNotEmpty()) { objFilePt->FileName = p->Name; } // endif
                           );
       } // end case
      case NOOJ_Tn   :
       { MajorCtrlSolution(xBn.oj_bn, p, ObjFile = false; ); } // end case

      case PR_Tn     :
       { MajorCtrlSolution(xBn.pr_bn, p, LstFile = true;
          if(p->Name.IsNotEmpty()) { LstFilePt->FileName = p->Name; } // endif
                           );
       } // end case
      case NOPR_Tn   :
       { MajorCtrlSolution(xBn.pr_bn, p, LstFile = false; ); } // end case

      case SB_Tn     :
       { MajorCtrlSolution(xBn.sb_bn, p, LstFilePt->setn.symbols = true; ); } // end case
      case NOSB_Tn   :
       { MajorCtrlSolution(xBn.sb_bn, p, LstFilePt->setn.symbols = false; ); } // end case

      case XR_Tn     :
       { MajorCtrlSolution(xBn.xr_bn, p, LstFilePt->setn.Xref = true;
                                     LstFilePt->setn.symbols = true; ); } // end case
      case NOXR_Tn   :
       { MajorCtrlSolution(xBn.xr_bn, p, LstFilePt->setn.Xref = false; ); } // end case

      case COND_Tn   :
       { MajorCtrlSolution(xBn.co_bn, p, noCond = false; ); } // end case
      case NOCOND_Tn :
       { MajorCtrlSolution(xBn.co_bn, p, noCond = true; ); } // end case

      case MARO_Tn   :
       { MajorCtrlSolution(xBn.ma_bn, p, Dismacro = false; ); } // end case
      case NOMARO_Tn :
       { MajorCtrlSolution(xBn.ma_bn, p, Dismacro = true; ); } // end case

           /*
      case PGLEN_Tn  :
       { MajorCtrlSolution(pl_bn, p,  // do sth
                                       ); } // end case
      case PGWIDTH_Tn:
       { MajorCtrlSolution(pw_bn, p,  // do sth
                                       ); } // end case
           */
      default : { pt = pt->next; } // end default
    } // end switch

  } // end for

  return err;
} // MajorCtrlParse
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 遇上INCLUDE控制指令的操作。
//---------------------------------------------------------------------------
inline void MacroAsmber::
Case_Include_Do(ERR &err, AsmLine* &line, Tokenfield* &p)
{ if(p->next != NULL) // 把INCLUDE后面的命令移到下一行。
   { AsmLine* newln = new AsmLine;
     newln->LineNo = line->LineNo;    // 給新行賦行號值
     newln->Includ = true;             // 打上一個標記。
     newln->HeadToken()= MacroCTRLn;
     newln->head->next = p->next;
     p->next = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产三级| 日本vs亚洲vs韩国一区三区二区 | 欧美视频一区二区在线观看| 日韩午夜在线观看视频| 国产精品大尺度| 国产资源在线一区| 欧美亚洲禁片免费| 国产精品电影一区二区三区| 久久机这里只有精品| 在线中文字幕一区二区| 国产精品国产三级国产aⅴ中文| 免费成人结看片| 欧美片在线播放| 亚洲日本中文字幕区| 国产另类ts人妖一区二区| 欧美一区二区福利在线| 亚洲制服丝袜av| 色成人在线视频| 国产精品免费网站在线观看| 国产综合久久久久久鬼色 | 精品捆绑美女sm三区| 亚洲第一成年网| 色综合天天综合网国产成人综合天| 久久夜色精品国产欧美乱极品| 午夜精品影院在线观看| 欧洲视频一区二区| 亚洲六月丁香色婷婷综合久久| 成人av影院在线| 国产精品国产精品国产专区不片| 国产成人8x视频一区二区| 久久婷婷国产综合精品青草| 韩国三级在线一区| 亚洲精品在线观看网站| 久久精品99国产精品| 精品日韩一区二区| 国内精品久久久久影院薰衣草| 欧美大度的电影原声| 精品一区二区国语对白| 久久精品夜色噜噜亚洲aⅴ| 国产精品一线二线三线| 国产日韩欧美综合在线| 国产成人免费高清| 亚洲人精品一区| 日本韩国一区二区| 亚洲 欧美综合在线网络| 欧美一区二区三区在线电影| 麻豆成人在线观看| 久久久久久久网| av不卡免费电影| 亚洲国产精品久久久久秋霞影院| 欧美日韩亚洲综合在线| 久久99国产精品久久99果冻传媒| 国产日韩一级二级三级| 色综合网站在线| 琪琪久久久久日韩精品| 国产婷婷色一区二区三区四区| 丁香婷婷综合激情五月色| 亚洲欧美国产三级| 91精品国产麻豆国产自产在线| 精品一区二区三区在线视频| 国产精品系列在线| 欧美日韩激情一区| 国产美女久久久久| 亚洲最新在线观看| 日韩美女主播在线视频一区二区三区| 国产精品一区二区在线观看不卡| 国产精品国产自产拍在线| 欧美精品在线视频| 粉嫩aⅴ一区二区三区四区| 亚洲小说欧美激情另类| 久久综合久久综合久久| 在线观看免费亚洲| 国产尤物一区二区| 午夜精品一区二区三区电影天堂| 26uuu另类欧美| 欧洲一区在线观看| 粉嫩aⅴ一区二区三区四区五区| 亚洲国产另类av| 国产精品女人毛片| 精品国产一区二区三区不卡| 在线影院国内精品| 国产成人综合精品三级| 日韩国产欧美三级| 亚洲久草在线视频| 中文字幕av一区二区三区高| 91精品国产综合久久久蜜臀粉嫩| 97aⅴ精品视频一二三区| 久久99精品久久只有精品| 亚洲第一狼人社区| 中文字幕字幕中文在线中不卡视频| 精品黑人一区二区三区久久| 欧美三级在线播放| 色激情天天射综合网| 大美女一区二区三区| 久久se精品一区二区| 日韩av一级片| 亚洲国产日韩a在线播放| 亚洲视频在线观看一区| 国产亚洲欧洲一区高清在线观看| 日韩一区二区不卡| 日韩欧美一级精品久久| 欧美日韩1区2区| 欧美日韩日日骚| 欧美亚洲日本一区| 在线观看一区二区精品视频| 91美女片黄在线| 99国产欧美另类久久久精品| 成人午夜在线视频| 国产成人精品免费视频网站| 国产精品一区三区| 国产成人av电影在线| 国产成人av网站| 成人av资源网站| 成人av午夜影院| 99国产精品久久久久久久久久 | 久久婷婷综合激情| 精品久久久久久久久久久久久久久 | 欧美电影在哪看比较好| 在线观看亚洲a| 欧美日韩免费高清一区色橹橹 | 一区二区三区欧美视频| 一区二区三区四区在线免费观看| 一区在线观看视频| 日韩毛片高清在线播放| 一区二区视频在线| 亚洲成人tv网| 青草国产精品久久久久久| 老司机免费视频一区二区| 老司机精品视频线观看86 | 99在线精品观看| 在线国产电影不卡| 6080日韩午夜伦伦午夜伦| 日韩欧美资源站| 欧美—级在线免费片| 亚洲欧洲国产日韩| 亚洲成在线观看| 国产一区二区在线观看免费 | 日韩电影在线看| 久久国产综合精品| 懂色av一区二区在线播放| 一本高清dvd不卡在线观看| 欧美日韩精品久久久| 日韩精品一区二区三区老鸭窝| 国产亚洲精品bt天堂精选| 亚洲三级电影网站| 麻豆久久久久久久| 成人av手机在线观看| 欧美日韩不卡视频| 国产婷婷一区二区| 污片在线观看一区二区| 国产精一区二区三区| 在线亚洲+欧美+日本专区| 精品日韩一区二区三区免费视频| 自拍偷自拍亚洲精品播放| 调教+趴+乳夹+国产+精品| 国产99一区视频免费| 欧美精品色综合| 国产精品美日韩| 日本视频一区二区三区| av中文字幕不卡| 亚洲精品在线三区| 亚洲国产精品人人做人人爽| 国产精品66部| 欧美精三区欧美精三区| 日韩毛片精品高清免费| 加勒比av一区二区| 欧美日韩一区小说| 亚洲欧洲国产日本综合| 国产一区二区三区免费看| 久久新电视剧免费观看| 亚洲韩国一区二区三区| 岛国精品在线观看| 欧美精品一区二区在线播放| 亚洲国产精品一区二区久久恐怖片| 国产精品一品二品| 欧美mv日韩mv| 天涯成人国产亚洲精品一区av| 91亚洲国产成人精品一区二区三| 日韩片之四级片| 日本在线不卡视频| 欧美伊人久久大香线蕉综合69 | 日韩欧美高清dvd碟片| 亚洲永久精品国产| 一道本成人在线| 中文字幕亚洲一区二区va在线| 国产成人综合网| 精品成人私密视频| 蜜桃视频免费观看一区| 欧美日韩免费观看一区三区| 一区二区三区日韩精品| 91蜜桃在线免费视频| 最新中文字幕一区二区三区| 国产福利不卡视频| 国产婷婷一区二区| 成人伦理片在线| 中文字幕在线不卡| av爱爱亚洲一区| 伊人色综合久久天天| 91传媒视频在线播放| 亚洲一区电影777|