⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opcodesubb.java

📁 這是一個8051的模擬器 以java寫成
💻 JAVA
字号:
/** * Projet de langage JAVA IFITEP 3 2005 - Simulateur 8051  * <p>  * D閒inition de l'instruction SUBB. * Cf.: *  - documentation technique 8051 *  - Ouvrage "Microcontroleur 8051 et 8052", edition Dunod *   * @author Matthieu SIMON * @version 1.0 du 14/06/05 */public class OpcodeSUBB extends Opcode {	public void execute(CORE_CPU8051 cpu) throws OpcodeException {		int a, src;				if((a = decodeAddressingMode(cpu.getCurrentLine().getOperand(1))) != CORE_CPU8051.ACC)			throw new OpcodeException(this, "Bad Addressing Mode");		if((src = decodeAddressingMode(cpu.getCurrentLine().getOperand(2))) == Integer.MAX_VALUE)			throw new OpcodeException(this, "Bad Addressing Mode");				a = CORE_CPU8051.internalDataMem[a];		src = CORE_CPU8051.internalDataMem[src];				int i, out = 0;		byte old_c = (byte)((CORE_CPU8051.internalDataMem[CORE_CPU8051.PSW]>>7)&1), new_c = 0;		byte s, OV = 0;				CORE_CPU8051.internalDataMem[CORE_CPU8051.PSW] &= ~0xC4; // clear C, AC et OV				for(i = 0; i < 8; i++) {			s = (byte)((byte)((a>>i)&1) - (byte)((src>>i)&1));			if(s == -1) {				s = 1;				new_c = 1;			}			s -= old_c;			if(s == -1) {				s = 1;				new_c = 1;			}			out |= s << i;				old_c = new_c;			new_c = 0;						if(i == 3 && old_c == 1) // Carry BCD				CORE_CPU8051.internalDataMem[CORE_CPU8051.PSW] |= 0x40; // AC flag			if(i == 6 && old_c == 1) // Overflow si pas de retenu a la fin				OV = 1;		}		OV = (byte)(((OV == 1 && old_c == 0) || (OV == 0 && old_c == 1)) ? 1 : 0);		CORE_CPU8051.internalDataMem[CORE_CPU8051.PSW] |= (old_c<<7) | (OV<<2);		CORE_CPU8051.internalDataMem[CORE_CPU8051.ACC] = (byte)out;		cpu.incCyclesCount(1);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -