PKU : 2410 - Simple Computers

問題概要

http://poj.org/problem?id=2410

メモリ上に連続して命令が書かれているので, 順番に実行せよ.
プログラム終了時のアキュームレータの値を出力すること.

アルゴリズム

やるだけ.
PCのmod 32とか, accuのmod 256とか忘れないように注意.

プログラム

int main(void){
  while(1){
    int mem[32],accu=0,pc=0;
    rep(i,32){
      char bit[10];
      if(scanf("%s",bit) == EOF) return 0;
      mem[i] = 0;
      for(int j=7;j>=0;j--) if(bit[7-j] == '1') mem[i] |= 1<<j;
    }

    while(1){
      int op = mem[pc] >> 5;
      int x = mem[pc] & ((1<<5) - 1);

      if(op == 0){
        mem[x] = accu;
      }
      else if(op == 1){
        accu = mem[x];
      }
      else if(op == 2){
        if(accu == 0) pc = x-1;
      }
      else if(op == 3){
        //nop
      }
      else if(op == 4){
        accu = (accu + 255) % 256;
      }
      else if(op == 5){
        accu = (accu + 1) % 256;
      }
      else if(op == 6){
        pc = x-1;
      }
      else if(op == 7){
        break;
      }

      pc = (pc + 1) % 32;
    }

    for(int i=7;i>=0;i--){
      printf("%d",(accu&(1<<i)) ? 1 : 0);
    }
    printf("\n");
  }
}