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

📄 xmicro.cpp

📁 eC++编译器源码
💻 CPP
字号:
#include <Micro.h>
//Loads the microcode for the microengine interpreter described
//in Tanenbaum's Computer Organization text
/* all numbers in decimal!!
LOD 3           AC<-memory[3]
STO 3           memory[3]<-AC
ADD 3           AC = AC+memory[3]
SUB 3           AC = AC-memory[3]
JA+ 3           Jump AC + or 0 to 3
JA0 3           Jump AC 0 to 3
JMP 3           Unconditional jump to 3
LOC 7           AC<-7
JA- 3           Jump AC - to 3
JNZ 3           Jump AC != 0 to 3
PUSH 0          Push AC on the stack (set sp first to init stack)
POP 0           Pop top of stack to AC
SWAP 0          AC<->SP (used to assign the stack pointer)
STOP 0          halts processor; terminates C++ program
*/

void main(void)
{ char nameTable[200], s[50];
  nameTable = "PC:0 AC:1 SP:2 IR:3 TIR:4 C0:5 C1:6 C-1:7 AM:8 Ra:10 JUMP-:1 JUMPZ:2 JUMP:3 A+B:0 A&B:1 A:2 NOTA:3 RIGHT:1 LEFT:2";
  s = "A C0 ALU A C PC";   
  StoreControl(0, s, nameTable);   /*0*/
  s = "RD B PC MAR";
  StoreControl(1, s, nameTable);   /*1*/
  s = "RD A PC B C1 ALU A+B C PC";
  StoreControl(2, s, nameTable);   /*2*/
  s = "AMUX ALU A C IR COND JUMP- ADR 29";
  StoreControl(3, s, nameTable);   /*3*/
  s = "A IR B IR ALU A+B SH LEFT C TIR COND JUMP- ADR 20";
  StoreControl(4, s, nameTable);   /*4*/
  s = "A TIR ALU A SH LEFT C TIR COND JUMP- ADR 12";
  StoreControl(5, s, nameTable);   /*5*/
  s = "A TIR ALU A COND JUMP- ADR 10";
  StoreControl(6, s, nameTable);   /*6*/
  s = "B IR MAR RD";
  StoreControl(7, s, nameTable);   /*7*/
  s = "RD";
  StoreControl(8, s, nameTable);   /*8*/
  s = "AMUX ALU A C AC COND JUMP ADR 1";
  StoreControl(9, s, nameTable);   /*9*/
  s = "A AC B IR ALU A MAR AMBR WR";
  StoreControl(10, s, nameTable);   /*10*/
  s = "WR COND JUMP ADR 1";
  StoreControl(11, s, nameTable);   /*11*/
  s = "A TIR ALU A COND JUMP- ADR 16";
  StoreControl(12, s, nameTable);   /*12*/
  s = "B IR MAR RD";
  StoreControl(13, s, nameTable);   /*13*/
  s = "RD";
  StoreControl(14, s, nameTable);   /*14*/
  s = "AMUX B AC ALU A+B C AC COND JUMP ADR 1";
  StoreControl(15, s, nameTable);   /*15*/
  s = "B IR MAR RD";
  StoreControl(16, s, nameTable);   /*16*/
  s = "A AC B C1 ALU A+B C AC RD";
  StoreControl(17, s, nameTable);   /*17*/
  s = "AMUX ALU NOTA C Ra";
  StoreControl(18, s, nameTable);   /*18*/
  s = "A Ra B AC ALU A+B C AC COND JUMP ADR 1";
  StoreControl(19, s, nameTable);   /*19*/
  s = "A TIR ALU A SH LEFT C TIR COND JUMP- ADR 26";
  StoreControl(20, s, nameTable);   /*20*/
  s = "A TIR ALU A COND JUMP- ADR 24";
  StoreControl(21, s, nameTable);   /*21*/
  s = "A AC ALU A COND JUMP- ADR 1";
  StoreControl(22, s, nameTable);   /*22*/
  s = "A IR B AM ALU A&B C PC COND JUMP ADR 1";
  StoreControl(23, s, nameTable);   /*23*/
  s = "A AC ALU A COND JUMPZ ADR 23";
  StoreControl(24, s, nameTable);   /*24*/
  s = "COND JUMP ADR 1";
  StoreControl(25, s, nameTable);   /*25*/
  s = "A TIR ALU A COND JUMP- ADR 28";
  StoreControl(26, s, nameTable);   /*26*/
  s = "A IR B AM ALU A&B C PC COND JUMP ADR 1";
  StoreControl(27, s, nameTable);   /*27*/
  s = "A IR B AM ALU A&B C AC COND JUMP ADR 1";
  StoreControl(28, s, nameTable);   /*28*/
  s = "A IR B IR ALU A+B SH LEFT C TIR COND JUMP- ADR 42";
  StoreControl(29, s, nameTable);   /*29*/
  s = "A TIR ALU A SH LEFT C TIR COND JUMP- ADR 36";
  StoreControl(30, s, nameTable);   /*30*/
  s = "A TIR ALU A COND JUMP- ADR 34";
  StoreControl(31, s, nameTable);   /*31*/
  s = "A AC ALU A COND JUMP- ADR 23";        /*1000=JNEG*/
  StoreControl(32, s, nameTable);   /*32*/
  s = "COND JUMP ADR 1";
  StoreControl(33, s, nameTable);   /*33*/
  s = "A AC ALU A COND JUMPZ ADR 1";         /*1001=JNZ*/
  StoreControl(34, s, nameTable);   /*34*/
  s = "A IR B AM ALU A&B C PC COND JUMP ADR 1";
  StoreControl(35, s, nameTable);   /*35*/
  s = "A TIR ALU A COND JUMP- ADR 39";
  StoreControl(36, s, nameTable);   /*36*/
  s = "A SP B C-1 ALU A+B C SP";             /*1010=PUSH*/
  StoreControl(37, s, nameTable);   /*37*/
  s = "A AC B SP MAR ALU A MAR AMBR WR COND JUMP ADR 11";
  StoreControl(38, s, nameTable);   /*38*/
  s = "A SP B C1 ALU A+B C SP MAR RD";       /*1011=POP*/
  StoreControl(39, s, nameTable);   /*39*/
  s = "RD";
  StoreControl(40, s, nameTable);   /*40*/
  s = "AMUX ALU A C AC COND JUMP ADR 1";
  StoreControl(41, s, nameTable);   /*41*/
  s = "A TIR ALU A COND JUMP- ADR 255";       /*111xxxx=STOP*/
  StoreControl(42, s, nameTable);   /*42*/
  s = "A AC ALU A C Ra";
  StoreControl(43, s, nameTable);   /*43*/  /*110xxxx=SWAP*/
  s = "A SP ALU A C AC";
  StoreControl(44, s, nameTable);   /*44*/
  s = "A Ra ALU A C SP COND JUMP ADR 1";
  StoreControl(45, s, nameTable);   /*45*/
  nameTable = "LOD:0 STO:1000 ADD:2000 SUB:3000 JA+:4000 JA0:5000 JMP:6000 LOC:7000 JA-:8000 JNZ:9000 PUSH:A000 POP:B000 SWAP:C000 STOP:E000";
  Run(nameTable,
  "LOC 5"      //0
  "STO 300"    //1
  "LOC 7"      //2
  "SUB 300"    //3
  "JA+ 6"      //4
  "STOP 0"     //5
  "STOP 0"     //6
  );
};

⌨️ 快捷键说明

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