mem = [0] * 1000  # 主存
reg = [0] * 10  # 通用寄存器
pReg = 0  # 程序计数器
iReg = 0  # 指令寄存器
res = 0  # 存放输出结果# 加载TOY2程序
def loadProgram(file):global pReg, iReg, reg, mem  # 全局变量声明# *********** Begin **********## 打开文件fil = open(file)# 用于标识是否为第1条指令first = Truewhile True:  # 每循环一次加载一条指令# 读1行line = fil.readline()if line == '':  # 若读取完毕,则结束循环break# 将1行拆分为若干部分flds = line.split()# 第0部分为地址address = int(flds[0])# 第1部分为指令instruc = flds[1]# 将指令加载到主存单元mem[address] = instrucif first == True:  # 若是第1条指令pReg = address  # 则将其地址存入程序寄存器first = False  # 后面的指令不再是第1条指令fil.close()  # 关闭文件# 执行一条TOY2指令
def cycle():global pReg, iReg, reg, mem, res# 取指令,根据pReg的值,将指令从mem取到iRegiReg = int(mem[pReg])# pReg加1,指向下一条指令pReg = pReg + 1# 译码opcode = iReg // 10000  # 操作码op1 = (iReg // 1000) % 10  # 操作数1op2 = iReg % 1000  # 操作数2# 执行和写结果if opcode == 0:  # 停止指令return Falseelif opcode == 1:  # 数据移动指令:寄存器←主存reg[op1] = mem[op2]elif opcode == 2:  # 数据移动指令:主存←寄存器mem[op1] = reg[op2]elif opcode == 3:  # 数据移动指令:寄存器←数字reg[op1] = op2elif opcode == 4:  # 加法指令reg[op1] = reg[op1] + reg[op2]elif opcode == 5:  # 减法指令reg[op1] = reg[op1] - reg[op2]elif opcode == 6:  # 乘法指令reg[op1] = reg[op1] * reg[op2]elif opcode == 7:  # 除法指令reg[op1] = reg[op1] / reg[op2]elif opcode == 8:  # 无条件跳转指令pReg = op2elif opcode == 9:  # 条件跳转指令if reg[op1] == 0:pReg = op2elif opcode == 10:  # 输入指令reg[op1] = int(input('input:'))elif opcode == 11:  # 输出指令res = reg[op1]print('output:', reg[op1])return True# *********** End **********#def run(file):global pReg, iReg, reg, memloadProgram(file)  # 加载TOY2程序while True:  # 每循环一次,执行一条指令hasNextInstruc = cycle()  # 执行一条TOY2指令if hasNextInstruc == False:  # 若执行的是停机指令break  # 则跳出循环return resresult1 = run('./step1/add.toy2.txt') #运行add.toy2中的TOY2程序
result2 = run('./step1/sum100.toy2.txt')#运行sum100.toy2中的TOY2程序
if result1 == 25 and result2 == 5050:print("你的程序正确!!!")
else:print("你的程序错啦!!!")

add.toy2

000   031012
001   032013
002   041002
003   111000
004   000000

sum100.toy2

000   031000
001   032001
002   033001
003   041002
004   042003
005   034101
006   054002
007   094009
008   080003
009   111000
010   000000

Python学习 - 冯诺伊曼体系结构建模与模拟 之TOY模型机相关推荐

  1. 冯诺伊曼体系结构建模与模拟 之TOY模型机※

    第1关:TOY计算机建模与模拟※ 本关任务:利用python进行冯·诺依曼体系结构的模拟. mem = [0]*1000 #主存 reg = [0]*10 #通用寄存器 pReg = 0 #程序计数器 ...

  2. 【EduCoder答案】冯诺伊曼体系结构建模与模拟实训

    简介 答案查询的入口网页版 其他各类实训答案的目录见这里 答案获取的方法简介见这里 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 冯诺伊曼体系结构建模与模拟实训 >>& ...

  3. 编程语言与冯诺伊曼体系结构

    冯诺伊曼体系结构: 指令集+内存模型: 演化方向:机器语言.汇编语言.高级语言. 高级语言最终收到机器语言(指令集+内存模型)冯诺伊曼体系结构的约束. 千变万化,不离其宗. 冯·诺依曼体系结构计算机的 ...

  4. 计算机冯诺伊曼体系结构和哈佛体系结构区别和处理器性能评判标准

    计算机体系结构主要分为两类:冯·诺依曼结构 和哈弗体系 二者的区别就是程序空间和数据空间是否是一体的,冯·诺依曼结构数据空间和地址空间是不分开的,而哈佛结构数据空间和地址空间是分开的. 冯·诺依曼结构 ...

  5. 冯.诺伊曼体系结构的计算机工作原理是,冯 诺依曼型计算机的工作原理是什么...

    冯诺依曼计算机工作原理 冯 诺依曼计算机工作原理的核心是 和 程序控制 世界上不同型号的计算机,就其工作原理而言,一般都是认为冯 诺依曼提出了什么原理 冯 诺依曼原理中,计算机硬件系统由那五大部分组成 ...

  6. python金融衍生品_《Python金融衍生品大数据分析:建模、模拟、校准与对冲(博文视点出品)》【摘要 书评 试读】- 京东图书...

    本书是Hilpisch 博士的另一大作,书中完整介绍了衍生工具分析及其Python实践. --Baruch金融工程副教授 Alain Ledon 这是一本关于股票衍生工具定价前沿的全面性综述,并从实务 ...

  7. Linux:冯诺伊曼体系结构 | 操作系统 | 显卡 | 主板

    文章目录 冯诺依曼 主板.显卡.外设 数据流的流向 操作系统OS 系统调用接口和库函数 参考 全文约 1600 字,阅读时长预计: 5分钟 冯诺依曼 我们所认识的计算机,都是有一个个的硬件组件组成. ...

  8. Python学习三: 爬虫高级技巧 与 模拟实战练习

    三大爬虫技巧 许多网站针对爬虫的访问都设置了一定的障碍,通过这三步技巧,轻松绕过部分的反爬虫限制. (1)设置程序休止时间 import time import random# 休止睡眠 1 秒 这里 ...

  9. 冯.诺伊曼体系结构的计算机工作原理是,冯诺依曼体系结构计算机的要点和工作过程.doc...

    冯诺依曼体系结构计算机的要点和工作过程.doc 1.简述冯诺依曼体系结构计算机的要点和工作过程.答冯诺依曼体系结构计算机的要点计算机中的信息(程序和数据)以二进制方式表示.程序预存储,机器自动执行.计 ...

最新文章

  1. SMB文件共享及用户权限使用配置
  2. 【Codeforces 506E】Mr.Kitayuta’s Gift【BZOJ 4214】黄昏下的礼物 dp转有限状态自动机+矩阵乘法优化...
  3. 物流项目宣传活动任务前台分页展示
  4. 使用firefox遇到的问题
  5. mx2 android os耗电,魅族MX3 Flyme OS 3.2充电慢、耗电快问题的解决方法详解
  6. Maven精选系列--POM文件解析
  7. 交换两个数组 差最小 java_如何交换两个等长整形数组使其数组和的差最小(C和java实现)...
  8. linux给文件加可执行权限
  9. 使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较、同步...
  10. java判断字符串是否包含日文
  11. java路径Java开发中获得非Web项目的当前项目路径
  12. 办公协同:xmind8案例实战班-Array老师-专题视频课程
  13. 金蝶服务器换了无线网怎么办,搬家后wifi怎么重新设置?
  14. Win 10 关闭系统自动更新(解决svchost.exe 占用网络问题,解决svchost.exe不断消耗流量问题)
  15. php array =%3e变,https ipcrs.pbccrc.org.cn php的json和数组转换
  16. 乐观锁与悲观锁的生动举栗讲解
  17. kafka topic消息分配partition规则
  18. 今天是个天气晴朗的日子
  19. oracle并行查询结果不唯一,Oracle并行查询出错
  20. c2c网站开店的流程图_C2C网店策划书

热门文章

  1. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想
  2. String Shifting
  3. 设计模式笔记--访问者模式
  4. 文明与征服平民武将搭配,教你克敌制胜
  5. CDH5: 使用parcels配置lzo
  6. 2020 Stibo Systems全球事业部新财年启动大会胜利召开
  7. 2022.6.14日新selenium写法
  8. mac命令行更新gradle
  9. 乱七八糟的pwn入门(六)——5.passcode
  10. VS 调试时,不允许修改代码