import java.io.*;
import java.util.*;

public class Studiac {

  final static int RAM_SIZE = 100;
  int ram[]; // pomnilnik (00 .. 99)
  boolean ramAccess[]; // segfault (00 .. 99)
  int acc; // akumulator
  int cnt; // programski števec

  private static String[] asmStr = {"RD", "WR", "LD", "ST", "AD", "SB", "GO", "TZ", "TN", "HL"};

  private static String addDummyZeroes(int n, int d) {
    String res = "" + n;
    while (res.length() < d) res = "0" + res;
    return res;
  }

  private String removeWhitespace(String s) {
    StringBuffer sb = new StringBuffer("");
    for (int i=0; i<s.length(); i++) {
      if (!Character.isWhitespace(s.charAt(i))) sb.append(s.charAt(i));
    }
    return sb.toString();
  }

  private static int asmToNumbers(String u) {
    for (int i=0; i<asmStr.length; i++) {
      if (u.equals(asmStr[i])) return i;
    }
    return -1;
  }

  private static int parseUkaz(String s, int counter, int lineCnt) {
    try {
      // strojni kod
      int n = Integer.parseInt(s.trim());
      if (n < 0 || n > 999) {
        System.err.println("OPOZORILO: Ukaz " + addDummyZeroes(counter, 2) + ":" + addDummyZeroes(n, 3)+ " v vrstici " +
          lineCnt + " ni v predpisanem območju (000 .. 999).");
        n %= 1000;
      }
      return n;
    } catch (NumberFormatException e) {
      // assembler
      int a = asmToNumbers(s.substring(0, 2));
      if (a != -1) {
        try {
          int b = Integer.parseInt(s.substring(2));
          if (b < 0 || b > 99) {
            System.err.println("OPOZORILO: Ukaz " + addDummyZeroes(counter, 2) + ":" + asmStr[a] + " " +
              addDummyZeroes(b, 2) + " v vrstici " + lineCnt + " ni v predpisanem območju (000 .. 999).");
            b %= 100;
          }
          int n = a*100 + b;
          return n;
        } catch (NumberFormatException e2) {
          System.err.println("NAPAKA: Sintaktična napaka v datoteki s strojnim kodom v vrstici " + lineCnt + ".");
          return -1;
        }
      } else {
        System.err.println("NAPAKA: Sintaktična napaka v datoteki s strojnim kodom v vrstici " + lineCnt + ".");
        return -1;
      }
    }
  }

  public Studiac(BufferedReader ukazi) {
    BufferedReader vhod = new BufferedReader(new InputStreamReader(System.in));

    // init
    acc = 0;
    cnt = 0;
    ram = new int[RAM_SIZE];
    ramAccess = new boolean[RAM_SIZE];

    // preberi ukaze
    String s;
    int counter = 0;
    int lineCnt = 0;
    try {
      while (true) {
        s = ukazi.readLine();
        lineCnt++;
        if (s == null) break; // end of file
        s = removeWhitespace(s).toUpperCase(); // remove leading whitespace & convert to upperCase
        if (s.length() == 0) continue; // ignore empty line
        if (s.charAt(0) == '#') continue; // ignore comment-line
        if (s.indexOf('#') != -1) {
          s = s.substring(0, s.indexOf('#'));
        }
        int ukaz = parseUkaz(s, counter, lineCnt);
        if (ukaz == -1) System.exit(42); // napaka
        if (counter >= RAM_SIZE) {
          System.err.println("OPOZORILO: Podanih je več ukazov, kot je na voljo pomnilnika, zato bodo ignorirani.");
        } else {
          ram[counter] = ukaz;
          ramAccess[counter] = true;
        }
        counter++;
      }
    } catch (IOException e) {
      System.err.println("NAPAKA: Ne morem prebrati datoteke s strojnim kodom.");
      System.exit(3);
    }
  }

  public void pozeni() {
    BufferedReader vhod = new BufferedReader(new InputStreamReader(System.in));

    // poženi
    while (true) {
      int ukaz = ram[cnt];
      if (ramAccess[cnt] == false) {
        System.err.println("OPOZORILO: Izvajam ukaz na neinicializiranem naslovu: " +
          addDummyZeroes(cnt, 2) + ".");
      }
      cnt++;
      int cmd = ukaz / 100;
      int xy = ukaz % 100;
      switch (cmd) {
        case 0:
          // preberi podatke s traku v lokacijo xy
          try {
            String s = vhod.readLine();
            int data = Integer.parseInt(s);
            if (data < 0 || data > 999) {
              System.err.println("OPOZORILO: Podatek z vhodnega traku " + data + " ni v predpisanem območju (000 ... 999).");
              data %= 1000;
            }
            ramAccess[xy] = true;
            ram[xy] = data; // store data to memory
          } catch (IOException e) {
            System.err.println("NAPAKA: Napaka pri branju vhodnega traku.");
            System.exit(5);
          } catch (NumberFormatException e) {
            System.err.println("NAPAKA: Podatek na vhodnem traku je neustrezen (dovoljena so le cela števila).");
            System.exit(6);
          }
          break;
        case 1:
          // zapiši podatek z lokacije xy na izhodni trak
          if (ramAccess[xy] == false) {
            System.err.println("OPOZORILO: Izpisujem podatek z neinicializiranega naslova: " +
              addDummyZeroes(xy, 2) + ".");
          }
          System.out.println(ram[xy]);
          break;
        case 2:
          // informacijo z lokacije xy prepiši v akumulator
          if (ramAccess[xy] == false) {
            System.err.println("OPOZORILO: Nalagam v akumulator podatek z neinicializiranega naslova: " +
              addDummyZeroes(xy, 2) + ".");
          }
          acc = ram[xy];
          break;
        case 3:
          // informacijo z akumulatorja prepiši v xy
          ram[xy] = acc;
          ramAccess[xy] = true;
          break;
        case 4:
          // akumulatorju prištej podatek iz xy
          if (ramAccess[xy] == false) {
            System.err.println("OPOZORILO: Akumulatorju prištevam podatek z neinicializiranega naslova: " +
              addDummyZeroes(xy, 2) + ".");
          }
          acc += ram[xy];
          acc %= 1000;
          break;
        case 5:
          // akumulatorju odštej podatek iz xy
          if (ramAccess[xy] == false) {
            System.err.println("OPOZORILO: Akumulatorju odštevam podatek z neinicializiranega naslova: " +
              addDummyZeroes(xy, 2) + ".");
          }
          acc -= ram[xy];
          while (acc < 0) acc += 1000;
          acc %= 1000;
          break;
        case 6:
          // v porgramski register zapiši xy
          cnt = xy;
          break;
        case 7:
          // če acc == 0, v programski register zapiši xy
          if (acc == 0) {
            cnt = xy;
          }
          break;
        case 8:
          // če acc != 0, v programski register zapiši xy
          if (acc != 0) {
            cnt = xy;
          }
          break;
        case 9:
          // halt
          return;
      }
    }
  }

  public static void main(String[] args) {
    if (args.length != 1) {
      System.err.println("NAPAKA: Datoteka s strojnim kodom ni podana.\nUporaba: java Studiac <strojni_kod>");
      System.exit(1);
    }
    try {
      BufferedReader ukazi = new BufferedReader(new FileReader(args[0]));
      Studiac stu = new Studiac(ukazi);
      stu.pozeni();
    } catch (FileNotFoundException e) {
      System.err.println("NAPAKA: Ne najdem datoteke s strojnim kodom.");
      System.exit(2);
    }
    System.exit(0);
  }

}
