【Educoder作业】冯·诺依曼体系结构模拟机 TOY2

【Educoder作业】冯·诺依曼体系结构模拟机 TOY2

只有一个题,思路和 T O Y 1 TOY1 TOY1是没有任何区别的。
整个这个 T O Y TOY TOY计算机的思想是显然的,就是用我们的 P y t h o n Python Python来模拟一个别的语言。
这个和之前的 T O Y 1 TOY1 TOY1区别就是在求出 o p c o d e , o p 1 , o p 2 opcode,op_1, op_2 opcode,op1,op2时是用的整数处理,更加容易简单。
贴个代码

mem = [0]*1000     #主存
reg = [0]*10       #通用寄存器
pReg = 0           #程序计数器
iReg = 0           #指令寄存器
res = 0            #存放程序输出结果

# loadProgram函数:加载程序,将file文件中的程序代码顺序存放到主存,程序第一条指令放入address地址对应的主存单元中,设置程序计数器pReg的值
def loadProgram(file):
    global pReg, iReg, reg, mem, address       #全局变量声明
    ########## Begin ##########
    txt = open(file, 'r')
    s = txt.readlines()
    l = len(s)
    for i in range(l) :
        bg = 3
        midl = len(s[i])
        while bg < midl and (s[i][bg]== ' ' or s[i][bg] == '\t') :
            bg += 1
        x = 0
        while bg < midl and s[i][bg] != '\n' :
            x = x * 10 + int(s[i][bg])
            bg = bg + 1
        mem[i + address] = x
    
    
    ########## End ##########
        
# cycle函数:执行一条 TOY2 指令,包括取指令、指令译码、执行和写结果 4 个步骤
def cycle():
    global pReg, iReg, reg, mem, res, address    #全局变量声明
    iReg = mem[pReg]
    ########## Begin ##########
    flag = False
    x, y, z = iReg // 10000, (iReg // 1000) % 10, iReg % 1000
    if x == 0 :
        return False
    elif x == 1 :
        reg[y] = mem[z]
    elif x == 2 :
        mem[z] = reg[y]
    elif x == 3 :
        reg[y] = z
    elif x == 4 :
        reg[y] += reg[z]
    elif x == 5 :
        reg[y] -= reg[z]
    elif x == 6 :
        reg[y] *= reg[z]
    elif x == 7 :
        reg[y] = reg[y] // reg[z]
    elif x == 8 :
        flag = True
        pReg = z + address
        iReg = mem[pReg]
    elif x == 9 :
        if reg[y] == 0 :
            flag = True
            pReg = z + address
            iReg = mem[pReg]
    elif x == 10 :
        reg[y] = int(input())
    elif x == 11 :
        print(reg[y])
    if flag == False :
        pReg = pReg + 1
    return True
    ########## End ##########

# run函数:加载程序并执行程序
def run(file):
    global pReg, iReg, reg, mem, res, address     #全局变量声明
    loadProgram(file)                   #加载TOY2程序
    pReg = address
    while True:                         #每循环一次,执行一条指令
        hasNextInstruc = cycle()        #执行一条TOY2指令
        if hasNextInstruc==False:       #若执行的是停机指令
            break                       #则跳出循环

fil = input()   #获取待执行程序所在的文件名
address = int(input())   #获取程序装载到主存的起始物理地址
run(fil)          #加载程序并执行
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
·诺依曼体系结构模拟机toy2是一种基于·诺依曼体系结构的计算机模拟机·诺依曼体系结构是计算机科学中最重要的体系结构之一,它将程序和数据存储在同一个存储器中,并通过控制单元进行指令的执行。 模拟机toy2是在·诺依曼体系结构基础上设计而成的。它包括了主存储器、中央处理单元(CPU)、输入输出设备和控制单元。主存储器用于存储程序和数据,CPU负责执行指令,而输入输出设备用于与外部环境进行交互。 模拟机toy2的CPU由算术逻辑单元(ALU)、寄存器和控制器组成。ALU负责进行算术和逻辑运算,寄存器用于存储指令和数据,而控制器则负责解析指令并控制程序的执行。控制器通过指令寄存器和程序计数器来读取和执行指令。 模拟机toy2的输入输出设备可以是键盘、显示器、打印机等。它们通过输入输出接口与计算机进行数据交换。 用模拟机toy2进行计算时,首先需要将程序和数据存储到主存储器中。然后,通过控制器将程序从主存储器读取到指令寄存器,再由程序计数器指示下一条要执行的指令。控制器解析指令,并将其发送给ALU进行计算。计算结果可以存储到寄存器或主存储器中。执行完一条指令后,程序计数器自动加1,指向下一条指令,以此类推,直到程序结束。 总之,·诺依曼体系结构模拟机toy2是一种基于·诺依曼体系结构的计算机模拟机,它将程序和数据存储在同一个存储器中,并通过控制单元进行指令的执行。它提供了CPU、主存储器和输入输出设备等基本组件,可用于进行程序的运行和数据的处理。它是理解和学习计算机体系结构的重要工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值