接前一篇文章,这里给出我实现的Simpletron模拟器的源代码。我觉得代码中很多地方看着不舒服,但是现在将就能用了。
首先是Simpletron.h:
#ifndef _SIMPLETRON_H_
#define _SIMPLETRON_H_
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#define READ 10
#define WRITE 11
#define LOAD 20
#define STORE 21
#define ADD 30
#define SUBTRACT 31
#define DIVIDE 32
#define MULTIPLY 33
#define BRANCH 40
#define BRANCHNEG 41
#define BRANCHZERO 42
#define HALT 43
/*global variables and function prototype*/
int accumulator;
short instructionCounter;
int instructionRegister;
short operationCode;
short operand;
int memory[100];
static void init();
void instruction()
{
printf("*** Welcome to Simpletron ***/n");
printf("*** Please enter your program one instruction ***/n");
printf("*** ( or data word ) at a time, I will type the ***/n");
printf("*** location number and a question mark (?). ***/n");
printf("*** You then type the word for that location. ***/n");
printf("*** Type the sentinel -99999 to stop entering ***/n");
printf("*** your program. ***/n");
}
void dump()
{
char sign = '+';
int start = 9;
int i = 0;
int j = 0;
int skip = 7;
printf("/n/n");
printf("REGISTERS:/n");
pr
首先是Simpletron.h:
#ifndef _SIMPLETRON_H_
#define _SIMPLETRON_H_
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
#define READ 10
#define WRITE 11
#define LOAD 20
#define STORE 21
#define ADD 30
#define SUBTRACT 31
#define DIVIDE 32
#define MULTIPLY 33
#define BRANCH 40
#define BRANCHNEG 41
#define BRANCHZERO 42
#define HALT 43
/*global variables and function prototype*/
int accumulator;
short instructionCounter;
int instructionRegister;
short operationCode;
short operand;
int memory[100];
static void init();
void instruction()
{
printf("*** Welcome to Simpletron ***/n");
printf("*** Please enter your program one instruction ***/n");
printf("*** ( or data word ) at a time, I will type the ***/n");
printf("*** location number and a question mark (?). ***/n");
printf("*** You then type the word for that location. ***/n");
printf("*** Type the sentinel -99999 to stop entering ***/n");
printf("*** your program. ***/n");
}
void dump()
{
char sign = '+';
int start = 9;
int i = 0;
int j = 0;
int skip = 7;
printf("/n/n");
printf("REGISTERS:/n");
pr