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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cc4.c

?? 一個(gè)簡(jiǎn)單的編譯器
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
    for(i = -1; ++i <= HIGH_SEQ; ) {
      count = seq[i];
      printf("; %2u   %5u\n", i, *count);
      poll(YES);
      }
    }  
#endif 
  }

/*
** remember where we are in the queue in case we have to back up.
*/
setstage(before, start) int *before, *start; {
  if((*before = snext) == 0)
    snext = stage;
  *start = snext;
  }

/*
** generate code in staging buffer.
*/
gen(pcode, value) int pcode, value; {
  int newcsp;
  switch(pcode) {
    case GETb1pu:
    case GETb1p:
    case GETw1p: gen(MOVE21, 0); break;
    case SUB12:
    case MOD12:
    case MOD12u:
    case DIV12:
    case DIV12u: gen(SWAP12, 0); break;
    case PUSH1:  csp -= BPW;     break;
    case POP2:   csp += BPW;     break;
    case ADDSP:
    case RETURN: newcsp = value; value -= csp; csp = newcsp;
    }
  if(snext == 0) {
    outcode(pcode, value);
    return;
    }
  if(snext >= slast) {
    error("staging buffer overflow");
    return;
    }
  snext[0] = pcode;
  snext[1] = value;
  snext += 2;
  }

/*
** dump the contents of the queue.
** If start = 0, throw away contents.
** If before != 0, don't dump queue yet.
*/
clearstage(before, start) int *before, *start; {
  if(before) {
    snext = before;
    return;
    }
  if(start) dumpstage();
  snext = 0;
  }

/*
** dump the staging buffer
*/
dumpstage() {
  int i;
  stail = snext;
  snext = stage;
  while(snext < stail) {
    if(optimize) {
      restart:
      i = -1; 
      while(++i <= HIGH_SEQ) if(peep(seq[i])) {
#ifdef DISOPT
        if(isatty(output))
          fprintf(stderr, "                   optimized %2u\n", i);
#endif
        goto restart;
        }
      }
    outcode(snext[0], snext[1]);
    snext += 2;
    }
  }

/*
** change to a new segment
** may be called with NULL, CODESEG, or DATASEG
*/
toseg(newseg) int newseg; {
  if(oldseg == newseg)  return;
  if(oldseg == CODESEG) outline("CODE ENDS");
  else if(oldseg == DATASEG) outline("DATA ENDS");
  if(newseg == CODESEG) {
    outline("CODE SEGMENT PUBLIC");
    outline("ASSUME CS:CODE, SS:DATA, DS:DATA");
    }
  else if(newseg == DATASEG) outline("DATA SEGMENT PUBLIC");
  oldseg = newseg;
  }

/*
** declare entry point
*/
public(ident) int ident;{
  if(ident == FUNCTION)
       toseg(CODESEG);
  else toseg(DATASEG);
  outstr("PUBLIC ");
  outname(ssname);
  newline();
  outname(ssname);
  if(ident == FUNCTION) {
    colon();
    newline();
    }
  }

/*
** declare external reference
*/
external(name, size, ident) char *name; int size, ident; {
  if(ident == FUNCTION)
       toseg(CODESEG);
  else toseg(DATASEG);
  outstr("EXTRN ");
  outname(name);
  colon();
  outsize(size, ident);
  newline();
  }

/*
** output the size of the object pointed to.
*/
outsize(size, ident) int size, ident; {
  if(size == 1
  && ident != POINTER
  && ident != FUNCTION)      outstr("BYTE");
  else if(ident != FUNCTION) outstr("WORD");
  else                       outstr("NEAR");
  }

/*
** point to following object(s)
*/
point() {
  outline(" DW $+2");
  }

/*
** dump the literal pool
*/
dumplits(size) int size; {
  int j, k;
  k = 0;
  while (k < litptr) {
    poll(1);                     /* allow program interruption */
    if(size == 1)
         gen(BYTE_, NULL);
    else gen(WORD_, NULL);
    j = 10;
    while(j--) {
      outdec(getint(litq + k, size));
      k += size;
      if(j == 0 || k >= litptr) {
        newline();
        break;
        }
      fputc(',', output);
      }
    }
  }

/*
** dump zeroes for default initial values
*/
dumpzero(size, count) int size, count; {
  if(count > 0) {
    if(size == 1)
         gen(BYTEr0, count);
    else gen(WORDr0, count);
    }
  }

/******************** optimizer functions ***********************/

/*
** Try to optimize sequence at snext in the staging buffer.
*/
peep(seq) int *seq; {
  int *next, *count, *pop, n, skip, tmp, reply;
  char c;
  next = snext;
  count = seq++;
  while(*seq) {
    switch(*seq) {
      case any:   if(next < stail)       break;      return (NO);
      case pfree: if(isfree(PRI, next))  break;      return (NO);
      case sfree: if(isfree(SEC, next))  break;      return (NO);
      case comm:  if(*next & COMMUTES)   break;      return (NO);
      case _pop:  if(pop = getpop(next)) break;      return (NO);
      default:    if(next >= stail || *next != *seq) return (NO);
      }
    next += 2; ++seq;
    }

  /****** have a match, now optimize it ******/

  *count += 1;
  reply = skip = NO;
  while(*(++seq) || skip) {
    if(skip) {
      if(*seq == 0) skip = NO;
      continue;
      }
    if(*seq >= PCODES) {
      c = *seq & 0xFF;            /* get low byte of command */
      n = c;                      /* and sign extend into n */
      switch(*seq & 0xFF00) {
        case ife:   if(snext[1] != n) skip = YES;  break;
        case ifl:   if(snext[1] >= n) skip = YES;  break;
        case go:    snext += (n<<1);               break;
        case gc:    snext[0] =  snext[(n<<1)];     goto done;
        case gv:    snext[1] =  snext[(n<<1)+1];   goto done;
        case sum:   snext[1] += snext[(n<<1)+1];   goto done;
        case neg:   snext[1] = -snext[1];          goto done;
        case topop: pop[0] = n; pop[1] = snext[1]; goto done;
        case swv:   tmp = snext[1];
                    snext[1] = snext[(n<<1)+1];
                    snext[(n<<1)+1] = tmp;
        done:       reply = YES;
                    break;
        }
      }
    else snext[0] = *seq;         /* set p-code */
    }
  return (reply);
  }

/*
** Is the primary or secondary register free?
** Is it zapped or unused by the p-code at pp
** or a successor?  If the primary register is
** unused by it still may not be free if the
** context uses the value of the expression.
*/
isfree(reg, pp) int reg, *pp; {
  char *cp;
  while(pp < stail) {
    cp = code[*pp];
    if(*cp & USES & reg) return (NO);
    if(*cp & ZAPS & reg) return (YES);
    pp += 2;
    }
  if(usexpr) return (reg & 001);   /* PRI => NO, SEC => YES at end */
  else       return (YES);
  }

/*
** Get place where the currently pushed value is popped?
** NOTE: Function arguments are not popped, they are
** wasted with an ADDSP.
*/
getpop(next) int *next; {
  char *cp;
  int level;  level = 0;
  while(YES) {
    if(next >= stail)                     /* compiler error */
      return 0;
    if(*next == POP2)
      if(level) --level;
      else return next;                   /* have a matching POP2 */
    else if(*next == ADDSP) {             /* after func call */
      if((level -= (next[1]>>LBPW)) < 0)
        return 0;
      }
    else {
      cp = code[*next];                   /* code string ptr */
      if(*cp & PUSHES) ++level;           /* must be a push */
      } 
    next += 2;
    }
  }

/******************* output functions *********************/

colon() {
  fputc(':', output);
  }

newline() {
  fputc(NEWLINE, output);
  }

/*
** output assembly code.
*/
outcode(pcode, value) int pcode, value; {
  int part, skip, count;
  char *cp, *back;
  part = back = 0;
  skip = NO;
  cp = code[pcode] + 1;          /* skip 1st byte of code string */
  while(*cp) {
    if(*cp == '<') {
      ++cp;                      /* skip to action code */
      if(skip == NO) switch(*cp) {
        case 'm': outname(value+NAME); break; /* mem ref by label */
        case 'n': outdec(value);       break; /* numeric constant */
        case 'l': outdec(litlab);      break; /* current literal label */
        }
      cp += 2;                   /* skip past > */
      }
    else if(*cp == '?') {        /* ?..if value...?...if not value...? */
      switch(++part) {
        case 1: if(value == 0) skip = YES; break;
        case 2: skip = !skip;              break;
        case 3: part = 0; skip = NO;       break;
        }
      ++cp;                      /* skip past ? */
      }
    else if(*cp == '#') {        /* repeat #...# value times */
      ++cp;
      if(back == 0) {
        if((count = value) < 1) {
          while(*cp && *cp++ != '#') ;
          continue;
          }
        back = cp;
        continue;
        }
      if(--count > 0) cp = back;
      else back = 0;
      }
    else if(skip == NO) fputc(*cp++, output);
    else ++cp;
    }
  }

outdec(number)  int number; {
  int k, zs;
  char c, *q, *r;
  zs = 0;
  k = 10000;
  if(number < 0) {
    number = -number;
    fputc('-', output);
    }
  while (k >= 1) {
    q = 0;
    r = number;
    while(r >= k) {++q; r = r - k;}
    c = q + '0';
    if(c != '0' || k == 1 || zs) {
      zs = 1;
      fputc(c, output);
      }
    number = r;
    k /= 10;
    }
  }

outline(ptr)  char ptr[];  {
  outstr(ptr);
  newline();
  }

outname(ptr) char ptr[]; {
  outstr("_");
  while(*ptr >= ' ') fputc(*ptr++, output);
  }

outstr(ptr) char ptr[]; {
  poll(1);           /* allow program interruption */
  while(*ptr >= ' ') fputc(*ptr++, output);
  }

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站色在线观看| 91免费视频网址| 色哟哟国产精品| 欧美不卡一二三| 亚洲精品国产一区二区三区四区在线| 日本不卡高清视频| 在线一区二区观看| 亚洲国产精品黑人久久久| 日韩电影在线一区| 欧美色电影在线| 中文字幕在线不卡视频| 国产成人夜色高潮福利影视| 4438x成人网最大色成网站| 亚洲精品一二三| 成人免费黄色大片| 精品国产乱码久久久久久浪潮 | 2021国产精品久久精品| 亚洲午夜激情网站| 色综合久久综合网欧美综合网| 国产三级欧美三级| 精品一区在线看| 欧美一区二区三区视频| 亚洲高清免费观看| 欧美羞羞免费网站| 亚洲一区二区成人在线观看| 色综合天天综合给合国产| 国产精品久99| 99这里只有久久精品视频| 国产精品乱人伦中文| 成人精品小蝌蚪| 中文字幕在线一区| www..com久久爱| 中文字幕亚洲不卡| 在线一区二区三区| 亚洲国产日韩一级| 91麻豆精品国产综合久久久久久| 亚洲高清在线精品| 91精品视频网| 久久99在线观看| 久久久国产午夜精品| 高清不卡在线观看| 中文字幕亚洲视频| 欧美亚洲综合一区| 日本美女一区二区三区视频| 欧美tk丨vk视频| 国产99久久久久| 亚洲美女视频一区| 欧美日韩精品一区二区三区| 麻豆一区二区在线| 欧美激情一区二区三区蜜桃视频| www.色精品| 亚洲国产一二三| 精品少妇一区二区三区免费观看| 国产美女视频91| 亚洲嫩草精品久久| 91精品在线麻豆| 国产伦精品一区二区三区免费 | 国产成人综合在线播放| 亚洲欧洲日韩综合一区二区| 在线区一区二视频| 精品一区二区久久| 亚洲女同一区二区| 日韩欧美你懂的| 成a人片国产精品| 午夜视频一区二区| 国产色91在线| 欧美日韩1234| 丁香网亚洲国际| 日日夜夜一区二区| 国产精品色婷婷久久58| 欧美色欧美亚洲另类二区| 狠狠色丁香久久婷婷综合丁香| 亚洲少妇30p| 精品国产三级a在线观看| 91首页免费视频| 国内精品久久久久影院薰衣草| 亚洲欧美日韩一区二区 | 欧美日韩日本视频| 国产91精品一区二区麻豆网站| 亚洲香肠在线观看| 国产人妖乱国产精品人妖| 欧美美女一区二区三区| www.成人在线| 国产经典欧美精品| 日韩综合一区二区| 亚洲精品乱码久久久久久黑人| 久久女同性恋中文字幕| 欧美日韩一级视频| bt欧美亚洲午夜电影天堂| 激情图片小说一区| 日本伊人午夜精品| 亚洲国产精品人人做人人爽| 国产精品日韩精品欧美在线| 精品剧情在线观看| 91精选在线观看| 欧美午夜理伦三级在线观看| www.日本不卡| 成人av在线资源网站| 国产精品一区2区| 久久成人av少妇免费| 五月综合激情婷婷六月色窝| 一区二区三区毛片| 亚洲精品免费在线播放| 天天综合网 天天综合色| 亚洲视频资源在线| 国产欧美日韩在线视频| 久久久噜噜噜久噜久久综合| 精品卡一卡二卡三卡四在线| 日韩三级.com| 欧美大片在线观看一区二区| 91精品福利在线一区二区三区| 欧美日韩国产精品成人| 欧美性一级生活| 欧美性生活久久| 欧美色综合天天久久综合精品| 欧美在线色视频| 欧美乱妇15p| 日韩午夜在线影院| 日韩欧美一级二级三级久久久| 日韩限制级电影在线观看| 欧美tickling网站挠脚心| 日韩美女天天操| 久久久久久免费毛片精品| 国产欧美久久久精品影院| 国产色综合久久| 中文字幕中文乱码欧美一区二区| 亚洲欧洲日韩一区二区三区| 亚洲精品国产精品乱码不99| 亚洲成国产人片在线观看| 日韩av中文字幕一区二区| 国内精品伊人久久久久影院对白| 国产精选一区二区三区| aaa欧美日韩| 欧美日韩精品欧美日韩精品一综合 | 一本一道久久a久久精品| 91久久国产最好的精华液| 欧美日韩国产精品成人| 欧美成人一级视频| 国产精品国产馆在线真实露脸| 亚洲欧美国产三级| 男人的j进女人的j一区| 韩国三级电影一区二区| 成人福利电影精品一区二区在线观看| 色综合视频在线观看| 欧美老女人第四色| 国产午夜精品理论片a级大结局 | 日韩中文字幕一区二区三区| 六月婷婷色综合| www.欧美精品一二区| 4hu四虎永久在线影院成人| 国产免费久久精品| 亚洲成在线观看| 国产成人免费视频网站| 欧洲视频一区二区| 久久久久久久久一| 亚洲成人av资源| 国产成人午夜精品影院观看视频| 欧洲在线/亚洲| 久久久精品国产免费观看同学| 亚洲一区电影777| 丁香婷婷深情五月亚洲| 欧美一级高清片| 亚洲男同性恋视频| 国产精品综合网| 制服.丝袜.亚洲.另类.中文| 亚洲同性同志一二三专区| 蜜桃视频在线观看一区二区| 色综合久久中文字幕综合网| 欧美精品一区二区三区四区| 亚洲一级片在线观看| 成人av网址在线观看| 欧美va天堂va视频va在线| 亚洲国产综合91精品麻豆| 成人午夜电影小说| 欧美精品一区二区三区视频| 爽好久久久欧美精品| 99视频在线观看一区三区| 久久先锋影音av鲁色资源网| 五月婷婷综合激情| 色视频一区二区| 中文字幕一区av| 国产91精品一区二区麻豆亚洲| 日韩精品一区二区三区视频播放 | 欧美日高清视频| 亚洲一区免费在线观看| 99国产精品久久久久久久久久 | 亚洲精品v日韩精品| 成人av免费在线| 国产亚洲一区二区三区四区| 韩日欧美一区二区三区| 日韩免费成人网| 久热成人在线视频| 日韩一区二区中文字幕| 水野朝阳av一区二区三区| 在线不卡免费欧美| 日韩电影免费一区| 日韩三级在线免费观看| 美国一区二区三区在线播放| 日韩一区二区三区精品视频| 男人的天堂久久精品|