//2005 蒋彪开发 SML虚拟计算机语言实现模拟器
//SML,全名:SIMPLETRAN计算机,是一种老版本的二进制模拟计算机,执行二进制的机器语言,语言名称:SML
//SML部分基本概念:只有一个寄存器,用以存储相关运算的中间变量和进行运算
//只有100个内存单元,用以储存四位的十进制整数,其中整数前两位是操作符后两位是所运算的内存地址
//SML的操作符简介:
/* 10 从键盘中读取一个字到特定内存
11 从特定内存写一个字到屏幕
20 从特定内存将字装入寄存器
21 将寄存器的值装入指定内存单元
30 将内存单元中的值加上寄存器中的值(结果保留在寄存器中)
31 将内存单元中的值减去寄存器中的值(结果保留在寄存器中)
32 将内存单元中的字除以寄存器中的字(结果保留在寄存器中)
33 将内存单元中的值乘以寄存器中的值(结果保留在寄存器中)
40 转移到指定内存单元
41 如果寄存器中的值是负值,则转移到指定内存
42 如果寄存器中的值是0,则转移到指定内存
43 停机 */
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int leicun[100]={0};
int counter=0;
int jicunqi=0;
int chaozuoshu=0;
int address=0;
void zhuangru() //这个函数的作用就是读入SML程序,并将它写入由数组虚拟的内存中
{
int i=0;
int chengxu=0;
cout<<"请输入程序,以-9999为结束,并且程序数应该在-9999到9999之间"<<endl;
cout<<"内存地址 "<<"程序数 "<<endl;
do
{
cout<<i<<" ";
cin>>chengxu;
if(chengxu>=9999&&chengxu<=-9999)
{
cout<<"您输入了超出范围的程序数,请您重新输入"<<endl;
break;
}
leicun[i]=chengxu;
i++;
}
while(chengxu!=-9999&&i<=100);
if(i>100)
{
cout<<"您输入了超过100条的程序,你他妈的看不懂说明啊!"<<endl;
}
}
void bianxie() //这个函数的作用就是将数组里面的SML程序翻译成C++,并且运行,好好的牛比一把
{
int flag=1;
while(flag)
{
chaozuoshu=leicun[counter]/100;
address=leicun[counter]%100;
switch(chaozuoshu)
{
case 10:
cout<<"请输入一个数字"<<endl;
cin>>leicun[address];
counter++;
break;
case 11:
cout<<"第"<<address<<"号的内存值是: "<<leicun[address]<<endl;
counter++;
break;
case 20:
jicunqi=leicun[address];
cout<<"我们将内存中的值传入寄存器了"<<endl;
counter++;
break;
case 21:
leicun[address]=jicunqi;
cout<<"我们将寄存器传入内存了"<<endl;
counter++;
break;
case 30:
jicunqi+=leicun[address];
cout<<"我们将寄存器中的值和内存中的值相加"<<endl;
counter++;
break;
case 31:
jicunqi-=leicun[address];
cout<<"我们将寄存器中的值和内存中的值相减"<<endl;
counter++;
break;
case 32:
jicunqi/=leicun[address];
cout<<"我们将寄存器中的值和内存中的值相除"<<endl;
counter++;
break;
case 33:
jicunqi*=leicun[address];
cout<<"我们将寄存器中的值和内存中的值相乘"<<endl;
counter++;
break;
case 40:
counter=address;
cout<<"我们调转了程序执行的方向"<<endl;
break;
case 41:
if(jicunqi<0)
{counter=address;
cout<<"我们调转了程序执行的方向"<<endl;}
else
counter++;
break;
case 42:
if(jicunqi==0)
{counter=address;
cout<<"我们调转了程序执行的方向"<<endl;}
else
counter++;
break;
case 43:
flag=0;
cout<<"机器中止了,同志们,寄存器中的值是:"<<jicunqi<<endl;
break;
default:
cout<<"他妈的你输入的是什么吊操作数,怎么不能识别"<<endl;
}
}
}
void jieshao()//这个函数是用来介绍的
{
cout<<"2005 蒋彪开发 SML虚拟计算机语言实现模拟器"<<endl;
cout<<"SML,全名:SIMPLETRAN计算机,是一种老版本的二进制模拟计算机,执行二进制的机器语言,语言名称:SML"<<endl;
cout<<"SML部分基本概念:只有一个寄存器,用以存储相关运算的中间变量和进行运算"<<endl;
cout<<"只有100个内存单元,用以储存四位的十进制整数,其中整数前两位是操作符后两位是所运算的内存地址"<<endl;
cout<<"//SML的操作符简介:"<<endl;
cout<<" 10 从键盘中读取一个字到特定内存"<<endl;
cout<<" 11 从特定内存写一个字到屏幕 "<<endl;
cout<<" 20 从特定内存将字装入寄存器 "<<endl;
cout<<" 21 将寄存器的值装入指定内存单元"<<endl;
cout<<" 30 将内存单元中的值加上寄存器中的值(结果保留在寄存器中)"<<endl;
cout<<" 31 将内存单元中的值减去寄存器中的值(结果保留在寄存器中)"<<endl;
cout<<" 32 将内存单元中的字除以寄存器中的字(结果保留在寄存器中)"<<endl;
cout<<" 33 将内存单元中的值乘以寄存器中的值(结果保留在寄存器中)"<<endl;
cout<<" 40 转移到指定内存单元"<<endl;
cout<<" 41 如果寄存器中的值是负值,则转移到指定内存"<<endl;
cout<<" 42 如果寄存器中的值是0,则转移到指定内存 "<<endl;
cout<<" 43 停机 "<<endl;
}
int main()
{
cout<<"您已经进入了SML模拟器的天堂,首先欢迎您使用该程序,如果您有什么疑问,请键入h,否则键入d将开始程序!"<<endl;
char s;
//char *t="help";
cin>>s;
if(s=='h')
{jieshao();
cout<<"请键入a开始程序!如果您想看示例程序,请键入b"<<endl;
cin>>s;
if(s=='a'){
zhuangru();
bianxie();}
else if(s=='b')
{
cout<<"1007 从屏幕上面读入一个数并将它存入07号内存"<<endl;
cout<<"1008 从屏幕上面读入一个数并将它存入08号内存"<<endl;
cout<<"2007 将07号内存中的数字存入寄存器中 "<<endl;
cout<<"3008 将寄存器中的值和08号内存中的值相加并将结果存入寄存器中"<<endl;
cout<<"2109 将寄存器中的数字存入09号内存中 "<<endl;
cout<<"1109 将09号内存中的数字输出在屏幕上面 "<<endl;
cout<<"4300 停机 "<<endl;
cout<<"-9999 通知模拟器结束SML程序录入"<<endl;
cout<<"这个程序的作用是从屏幕上面读入两个数字并将他们相加"<<endl;
cout<<"蒋彪开发 2005"<<endl;
cout<<"准备好了吗?兄弟们!开始SML的旅行了"<<endl;
zhuangru();
bianxie();
}
}
else{
zhuangru();
bianxie();
}
return 0;
}
分享到:
相关推荐
通过C++实现得模拟SML代码,对学习C++编程的朋友有一定帮助,也能够帮助新手学习机器码在PC上执行的过程。读书是做的一个C++课程设计。
SML工具使用指南SML工具使用指南.pdf
SML实现图像标注/分类
Atom-sml-language-support.zip,atom中对sml的语言支持atom的sml语言支持,atom是一个用web技术构建的开源文本编辑器。
基于 sml 算法的类模型,以图像为训练样本
编译原理初级的词法分析器的实现。编码语言为c++,分析的语言为sml
SECS HSMS, socket create by csharp , easy to use or reference resources
基于DCT-GMM的SML的图片聚类功能的算法实现,使用MATLAB语言
SML 15210 Algorithm Practice Exam Midterm 1 SML exam practice
中科大编译原理课程相关资料 之 sml基本库手册。
这个提案阐述了一种可构建独立应用程序信息的通讯语言,可传输能量计量配套技术规范(COSEM)界面对象所定义的测量数据。IEC 62056-6-2 COSEM接口类和IEC 62056-6-1对象识别系统(Object Identification System OBIS...
课程中总共安排了三次实验,实验目标和具体验证的知识点如下: 1 第一次实验:(1)熟悉SML/NJ开发环境及使用;(2)掌握SML基本语法和书写规则;(3)SML简单程序设计和程序编写 ...(2)用ML语言求解实际问题。
SML_LC1809_LINUX_v0.9.3.5.8
使用某类图像作为训练样本,基于SML算法的类模型,
SML速分享博客源码是采用C#进行开发的博客网站源码。该博客源码已经有3年了,现在还在运行,由于自己比较懒,博客都没怎么更新内容,分享出来给有需要的朋友吧。菜单功能:源码框架组成介绍1)后台界面采用jquery-...
GEM/SECS模拟端Simulator,能与E5,E37的程序无接缝连接,能与任何其他支持secs的设备或EAP稳定连接.程序主要用于测试。 使用可视化SML语言编辑通讯内容。
python库。 资源全名:sml-0.6.4.tar.gz
Satisfactory SML.smod v3.3.0
该项目包含标准ML中“类型和编程语言”书籍的公司代码。 环境 要在此项目中运行代码,您需要新泽西州的标准ML编译器(缩写为SML / NJ),可在下载。 所有代码均在版本110.77下进行了测试。 运行中(Windows) 在...
谁知道在DOS版本ARCINFO下的宏,怎么转到ARCGIS用?