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

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

?? asmexecuter.java.svn-base

?? java寫的一個模擬cpu程序
?? SVN-BASE
字號:
/**
 * AsmExecuter.java
 * 
 * 
 * @author 詹道楠
 * @date 2008-5-7
 */
package execute;

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

public class AsmExecuter implements Parameters {
	
	private Registers registers;
	private PSWCell psw;
	private DataCell pc;
	private DataCell ac;
	private DataCell dc = new DataCell();
	private Memory mem;
	private int processID = -1;
	
	private UI ui;
	
	/**
	 * Return the ui.
	 */
	
	public UI getUi() {
	
		return ui;
	
	}

	/**
	 * Reset the ui.
	 */
	
	public void setUi(UI ui) {
	
		this.ui = ui;
	
	}

	public static void main(String[] args) throws IOException {
//
//		Memory mem = new Memory();
//		File file = new File("./1.txt");
//		file.createNewFile();
//		FileReader input = new FileReader(file);
//		mem.addProcess(new BufferedReader(input));
//		System.out.println(mem);
//		PCB pcb = new PCB();
//		mem.loadPCB(0, pcb);
//		Registers rs = pcb.getRegisters();
//		int pc = rs.getPc().getContent();
//		System.out.println(pc);
//		
//		AsmExecuter exe = new AsmExecuter(mem);
//		exe.reset(pcb);
//		
//		for(int i = 0; i < 7; i++) {
//			exe.execute(mem.getMem(pc));
//			pc = rs.getPc().getContent();
//			System.out.println(pcb.getRegisters());
//		}
//		
//		mem.savePCB(pcb);
//		System.out.println(mem);

	}

	public AsmExecuter(Memory mem) {
		
		this.registers = null;
		this.mem = mem;
		
	}
	
	public void execute(String s) {
		//System.out.println("+++++++++" + s);
		s = s.toLowerCase();
		System.out.println("asm " + s);
		registers.getIr().setContent(s);
		
		StringTokenizer tokens = new StringTokenizer(s);
		if(tokens.countTokens() < 1)
			System.out.println("error @ execute");
		
		String label = tokens.nextToken();
		String arg[] = new String[tokens.countTokens()];
		for(int i = 0; i < arg.length; i++)
			arg[i] = tokens.nextToken();
		
		if(label.compareTo("inc") == 0)
			inc(arg);
		else if(label.compareTo("dec") == 0)
			dec(arg);
		else if(label.compareTo("neg") == 0)
			neg(arg);
		else if(label.compareTo("add") == 0)
			add(arg);
		else if(label.compareTo("mul") == 0)
			mul(arg);
		else if(label.compareTo("div") == 0)
			div(arg);
		else if(label.compareTo("and") == 0)
			and(arg);
		else if(label.compareTo("or") == 0)
			or(arg);
		else if(label.compareTo("xor") == 0)
			xor(arg);
		else if(label.compareTo("not") == 0)
			not(arg);
		else if(label.compareTo("cmp") == 0)
			cmp(arg);
		else if(label.compareTo("jmp") == 0)
			jmp(arg);
		else if(label.compareTo("loopn") == 0)
			loopn(arg);
		else if(label.compareTo("loopnz") == 0)
			loopnz(arg);
		else if(label.compareTo("loopz") == 0)
			loopz(arg);
		else if(label.compareTo("loopp") == 0)
			loopp(arg);
		else if(label.compareTo("loopzp") == 0)
			loopzp(arg);
		else if(label.compareTo("mov") == 0)
			mov(arg);
		else if(label.compareTo("in") == 0)
			in(arg);
		else if(label.compareTo("out") == 0)
			out(arg);
		else if(label.compareTo("print") == 0)
			print(arg);
		else if(label.compareTo("halt") == 0)
			halt(arg);
		else
			System.out.println("errer1 @ execute");
		
	}
	
	private boolean overFlowCheck(int n) {
		
		if(n <= MAX && n >=MIN)
			return false;
		else {
			psw.setState(OVERFlOW);
			return true;
		}
		
	}
	
	private void pcINC() {
		
		int i = pc.getContent();
		if(i >= 0 && i < MEM_SIZE - 1)
			pc.setContent(i + 1);
		else
			pc.setContent(0);
		
	}
	
	private void inc(String arg[]) {
		
		if(!isR(arg[0]))
			System.out.println("error0 @ inc");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		int result = dr.getContent() + 1;
		
		if(overFlowCheck(result))
			return;
		
		dr.setContent(result);
		pcINC();
		
	}
	
	private void dec(String arg[]) {
		
		if(!isR(arg[0]))
			System.out.println("error0 @ dec");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		int result = dr.getContent() - 1;
		
		if(overFlowCheck(result))
			return;
		
		dr.setContent(result);
		pcINC();
		
	}
	
	private void neg(String arg[]) {
		
		if(!isR(arg[0]))
			System.out.println("error0 @ neg");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		int result = -dr.getContent();
		
		if(overFlowCheck(result))
			return;
		
		dr.setContent(result);
		pcINC();
		
	}
	
	private void add(String arg[]) {
		
		int result = 0;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ add");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		result = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			result += dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			if(overFlowCheck(ac.getContent()))
				return;
			result += ac.getContent();
		}
		
		if(overFlowCheck(result))
			return;
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void mul(String arg[]) {
		
		int result = 1;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ mul");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			result *= dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			if(overFlowCheck(ac.getContent())) {
				return;
			}
			result *= ac.getContent();
		}
		
		if(overFlowCheck(result))
			return;
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void div(String arg[]) {
		
		int result = 0;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ add");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		int temp = 1;
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			temp = dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			temp = ac.getContent();
			if(overFlowCheck(temp))
				return;
		}
		
		if(temp == 0)
			divByZero();
		else
			ac.setContent(result / temp);
		
		pcINC();
		
	}
	
	private void divByZero() {
		
		psw.setState(DIVBYZERO);
		
	}
	
	private void and(String arg[]) {
		
		int result = 0;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ mul");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			result = result & dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			result = result & ac.getContent();
		}
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void or(String arg[]) {
		
		int result = 0;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ or");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			result = result | dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			result = result | ac.getContent();
		}
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void xor(String arg[]) {
		
		int result = 0;
		int i, j;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ xor");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		i = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			j = dr.getContent();
		}
		else {
			ac.setContent(arg[1]);
			j = ac.getContent();
		}
		
		result = (i & (Integer.MAX_VALUE - j)) | (j & (Integer.MAX_VALUE - i));
		result = result & MASK;
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void not(String arg[]) {
		
		int result = 0;
		
		if(!isR(arg[0]))
			System.out.println("error0 @ not");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		result = Integer.MAX_VALUE - result;
		result = result & MASK;
		
		ac.setContent(result);
		pcINC();
		
	}
	
	private void cmp(String arg[]) {
		
		int result = 0;
		if(!isR(arg[0]))
			System.out.println("error0 @ cmp");
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		result = dr.getContent();
		
		if(isR(arg[1])) {
			dr = registers.getDataRegister(arg[1]);
			result -= dr.getContent();
		}
		else {
			dc.setContent(arg[1]);
			result -= dc.getContent();
		}

		setPSW(result);

		pcINC();
		
	}
	
	private void jmp(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ jmp");
		
		ac.setContent(arg[0]);
		result = ac.getContent();
		result += pc.getContent();
		
		if(result < 0 && result > 1023)
			System.out.println("error1 @ jmp");
		
		pc.setContent(result);
		
	}

	private void loopn(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ loopn");

		ac.setContent(arg[0]);
		result = ac.getContent();
		result += pc.getContent();
		
		if(result >= 0 && result <= 1023)
			System.out.println("error1 @ loopn");
		
		if(psw.getState(NEGATIVE) != 0)
			pc.setContent(result);
		else
			pcINC();
		
	}
	
	private void loopnz(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ loopnz");

		dc.setContent(arg[0]);
		result = dc.getContent();
		result += pc.getContent();
		
		if(result < 0 && result > 1023) {
			System.out.println("error1 @ loopnz");
		}
		
		if((psw.getState(NEGATIVE) != 0) || 
				(psw.getState(ZERO) != 0))
			pc.setContent(result);
		else
			pcINC();
		
	}
	
	private void loopz(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ loopz");

		ac.setContent(arg[0]);
		result = ac.getContent();
		result += pc.getContent();
		
		if(result >= 0 && result <= 1023)
			System.out.println("error1 @ loopz");
		
		if(psw.getState(ZERO) != 0)
			pc.setContent(result);
		else
			pcINC();
		
	}
	
	private void loopp(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ loopp");

		ac.setContent(arg[0]);
		result = ac.getContent();
		result += pc.getContent();
		
		if(result < 0 || result >= 1023)
			System.out.println("error1 @ loopp");
		
		if(psw.getState(POSITIVE) != 0)
			pc.setContent(result);
		else
			pcINC();
		
	}
	
	private void loopzp(String arg[]) {
		
		int result = 0;
		
		if(isR(arg[0]))
			System.out.println("error0 @ loopzp");

		ac.setContent(arg[0]);
		result = ac.getContent();
		result += pc.getContent();
		
		if(result >= 0 && result <= 1023)
			System.out.println("error1 @ loopzp");
		
		if((psw.getState(POSITIVE) != 0) || 
				(psw.getState(ZERO) != 0))
			pc.setContent(result);
		else
			pcINC();
		
	}
	
	/**
	 * mov push pop call ret is left for finish.///
	 */
	
	private void mov(String arg[]) {
		
		int result = 0;
		int offset = 0;
		String s;
		DataCell temp = new DataCell();
		
		DataCell dr = registers.getDataRegister(arg[0]);
		
		if(dr == null) {
			temp.setContent(Integer.parseInt(arg[0]));
			offset = temp.getContent();
			s = mem.getProcessData(processID, offset);
			temp.setContent(s);
			result = temp.getContent();
		}
		else
			result = dr.getContent();

		dr = registers.getDataRegister(arg[1]);
		
		if(dr == null) {
			temp.setContent(Integer.parseInt(arg[1]));
			offset = temp.getContent();
			temp.setContent(result);
			s = (temp.toString());
			mem.setProcessData(processID, offset, s);
		}
		else {
			dr.setContent(result);
		}
		
		pcINC();
		
	}
	
	private void in(String s[]) {
		
		psw.setState(INPUT_INTERRUPT);
		pcINC();
		
	}
	
	private void out(String arg[]) {
		
		if(arg.length != 2) {
			System.out.println("error0 @ out");
			return;
		}
		
		String out = "";
		//System.out.println(arg[1]);
		int n;
		if(arg[1].charAt(0) == 'r') {
			n = registers.getDataRegister(arg[1]).getContent();
		}
		else if(arg[1].charAt(0) == '#') {
			dc.setContent(arg[1]);
			n = dc.getContent();
		}
		else {
			dc.setContent(mem.getProcessData(processID, Integer.parseInt(arg[1])));
			n = dc.getContent();
		}
		
		//System.out.println("n = " + n);
		
		
		if(arg[0].compareTo("int") == 0) {
			out = (new Integer(n)).toString();
		}
		else if(arg[0].compareTo("char") == 0) {
			out = "" + (char)n;
		}
		else {
			System.out.println("error1 @ out");
		}
		
		//System.out.println(out);
		ui.display(out);
		
		pcINC();
		
	}
	
	private void print(String s[]) {
		
		psw.setState(PRINT_INTERRUPT);
		//System.out.println("process" + processID + " waiting for print");
		pcINC();
		
	}
	
	private void halt(String s[]) {
		
		psw.setState(HALT);
		
	}
	
	private boolean isR(String s) {
		
		if(s == null) {
			System.out.println("error @ isR");
			return false;
		}
		
		return (s.charAt(0) == 'r') || (s.charAt(0) == 'R');
		
	}
	
	private void setPSW(int n) {
		
		psw.clearState(UNNEGATIVE & UNZERO & UNPOSITIVE);

		if(n < 0)
			psw.setState(NEGATIVE);
		else if(n == 0)
			psw.setState(ZERO);
		else
			psw.setState(POSITIVE);
		
	}

	/**
	 * Return the registers.
	 */
	
	public Registers getRegisters() {
	
		return registers;
	
	}

	/**
	 * Reset the registers.
	 */
	
	public void setRegisters(Registers registers) {

		this.registers = registers;
		psw = registers.getPsw();
		pc = registers.getPc();
		ac = registers.getAc();
	
	}
	
	public void reset(PCB pcb) {

		this.registers = pcb.getRegisters();
		psw = registers.getPsw();
		pc = registers.getPc();
		ac = registers.getAc();
		processID = pcb.getProcessID();
		
	}
	
	/**
	 * Return the processID.
	 */
	
	public int getProcessID() {
	
		return processID;
	
	}

	/**
	 * Reset the processID.
	 */
	
	public void setProcessID(int processID) {
	
		this.processID = processID;
	
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777精品伊人久久久大香线蕉的 | 日韩一区二区在线观看视频| 欧美大片拔萝卜| 国产精品美女久久久久久久网站| 一区二区在线观看不卡| 激情图片小说一区| 欧美在线播放高清精品| 亚洲国产精品精华液2区45| 日韩av在线播放中文字幕| www.日韩精品| 久久美女高清视频| 日本欧洲一区二区| 日本丶国产丶欧美色综合| 国产三级三级三级精品8ⅰ区| 午夜精品久久久久久久久久久| bt欧美亚洲午夜电影天堂| 精品捆绑美女sm三区| 午夜视频一区在线观看| 色综合久久久久综合体桃花网| 国产调教视频一区| 国产乱子伦一区二区三区国色天香| 欧美日韩亚洲另类| 亚洲一区日韩精品中文字幕| 91网站最新地址| 成人欧美一区二区三区黑人麻豆| 国产乱人伦偷精品视频不卡 | 精品捆绑美女sm三区| 五月天视频一区| 欧美日韩一区国产| 亚洲国产精品影院| 欧美在线你懂得| 亚洲综合一区二区三区| 色婷婷亚洲综合| 亚洲精品日韩专区silk| 日本精品视频一区二区三区| 亚洲丝袜另类动漫二区| 色综合久久久网| 亚洲一区在线视频| 欧美日韩一级黄| 日本不卡视频一二三区| 日韩天堂在线观看| 韩国精品免费视频| 欧美激情一区二区三区蜜桃视频| 国产成人av一区| 国产精品不卡视频| 色偷偷成人一区二区三区91| 一区二区三区在线观看国产| 欧美色中文字幕| 日本亚洲电影天堂| 久久综合中文字幕| 成人性色生活片| 亚洲摸摸操操av| 精品视频1区2区3区| 男人的天堂亚洲一区| 精品91自产拍在线观看一区| 国产91精品精华液一区二区三区| 亚洲乱码国产乱码精品精可以看| 欧美亚洲国产一区二区三区va | 日韩美女视频一区| 欧美三级日韩三级| 精品一区二区久久| 成人欧美一区二区三区白人| 欧美日韩国产乱码电影| 国产真实乱对白精彩久久| 一区在线观看视频| 欧美精品粉嫩高潮一区二区| 国产乱对白刺激视频不卡 | 久久蜜臀中文字幕| 色综合久久久久综合体| 另类欧美日韩国产在线| 国产精品久久久久婷婷| 6080国产精品一区二区| 成人亚洲精品久久久久软件| 调教+趴+乳夹+国产+精品| 久久久久高清精品| 欧美色爱综合网| 不卡的av在线播放| 强制捆绑调教一区二区| 亚洲色图.com| 久久久亚洲午夜电影| 在线一区二区视频| 国产一区二区三区四区在线观看 | 久久婷婷成人综合色| 色呦呦网站一区| 99re热这里只有精品视频| 免费久久精品视频| 亚洲最新在线观看| 国产欧美精品一区| 日韩三级高清在线| 欧美色综合久久| 91色综合久久久久婷婷| 国产福利精品导航| 麻豆一区二区99久久久久| 一区二区三区中文字幕| 欧美激情在线看| 久久亚洲欧美国产精品乐播| 欧美日韩不卡视频| 91蝌蚪porny成人天涯| 成人综合婷婷国产精品久久免费| 日韩国产欧美在线播放| 亚洲一区二区视频在线观看| 国产精品成人一区二区艾草| 国产欧美日产一区| 久久影院电视剧免费观看| 91精品国产91综合久久蜜臀| 欧美三级蜜桃2在线观看| 色欧美片视频在线观看在线视频| 成人精品鲁一区一区二区| 国产一区 二区| 韩国成人精品a∨在线观看| 免费在线观看成人| 热久久久久久久| 午夜电影网一区| 一二三区精品视频| 亚洲最大色网站| 亚洲一二三区在线观看| 亚洲国产精品影院| 亚洲bt欧美bt精品777| 亚洲第一福利一区| 偷拍与自拍一区| 日韩avvvv在线播放| 免费观看在线色综合| 免费成人av在线| 国产一区亚洲一区| 国产精品88av| 成人av网站免费| 色94色欧美sute亚洲13| 欧美亚洲国产一区在线观看网站| 欧美日本乱大交xxxxx| 56国语精品自产拍在线观看| 日韩视频永久免费| 久久夜色精品国产噜噜av | 欧美一级日韩一级| 欧美mv日韩mv国产网站app| 久久色在线视频| 自拍偷拍亚洲综合| 午夜国产不卡在线观看视频| 麻豆91精品91久久久的内涵| 国产在线一区观看| 色综合天天综合| 精品国产一区二区在线观看| 日韩精品一区二区三区老鸭窝 | 亚洲精品日韩专区silk| 五月婷婷综合网| 精品一区二区三区蜜桃| voyeur盗摄精品| 欧美日韩一区二区三区四区| 欧美mv日韩mv亚洲| 亚洲视频一二区| 青青草精品视频| 99久久综合狠狠综合久久| 欧美日高清视频| 国产女主播一区| 日韩影视精彩在线| 国产999精品久久| 欧美色爱综合网| 中文字幕精品三区| 日本一道高清亚洲日美韩| 成人h精品动漫一区二区三区| 欧美日韩精品免费| 国产精品久久毛片a| 免费成人在线观看| 91年精品国产| 久久亚洲精品小早川怜子| 一区二区三区高清| 国产精品亚洲人在线观看| 一本一道综合狠狠老| 精品久久久久一区二区国产| 亚洲精品中文字幕在线观看| 精品一区二区三区久久| 欧美三区免费完整视频在线观看| 国产欧美精品一区二区三区四区| 婷婷中文字幕一区三区| 色综合天天综合色综合av| 久久婷婷国产综合国色天香| 日欧美一区二区| 91麻豆成人久久精品二区三区| 精品国产3级a| 日韩在线观看一区二区| 欧美在线|欧美| 最新久久zyz资源站| 国产成人鲁色资源国产91色综 | 精品国产乱码久久久久久牛牛| 夜夜精品视频一区二区| 丁香五精品蜜臀久久久久99网站| 欧美不卡一区二区三区| 日韩精品一级二级| 欧美视频在线不卡| 亚洲人午夜精品天堂一二香蕉| 国产98色在线|日韩| 久久综合色综合88| 久久精品久久99精品久久| 欧美精品在线视频| 亚洲aⅴ怡春院| 欧美日韩视频第一区| 亚洲国产一区二区三区| 在线免费亚洲电影| 亚洲综合丁香婷婷六月香| 91福利资源站| 亚洲高清视频中文字幕|