📄 xmicro.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 + -