You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import random
from UI import *
# import tkinter as tk
class MEM:
def __init__(self):
# 绘制存储器背景板
round_rectangle(597, 205, 928, 670, r=25, fill=BACK, width=0)
round_rectangle(675, 275, 910, 660, r=25, fill=BLACK, width=0)
def mark(self, cv:Canvas):
for i in range(20):
# 如果SimMARK中该存储单元为False则非高亮显示
if cpu.SimMARK[i] == False:
cv.create_rectangle(810, 282 + 18.5 * i, 897, 298 + 18.5 * i, width=3, outline=MEMBACK)
for i in range(20):
# 如果SimMARK中该存储单元为True则高亮显示
if cpu.SimMARK[i] == True:
cv.create_rectangle(810, 282 + 18.5 * i, 897, 298 + 18.5 * i, width=3, outline=MEMMARK)
cv.update()
# 根据当前的存储数据绘制当前的存储器
def show(self, cv: Canvas, root):
# 标记cpu各部分的名称
cv.create_text(670, 219, text='Mcontent', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(611, 356, text='Maddr', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(690, 255, text='地址(编号)', font=('time', 12,), anchor=NW, fill='#ffd700')
cv.create_text(830, 255, text='在选单元', font=('time', 12,), anchor=NW, fill='#ffd700')
# 根据存储的数据显示当前Maddr的值
cv.create_rectangle(619, 383, 648, 541, fill=WHITE, width=0)
cv.create_text(620, 390, text=cpu.MAD(), font=('微软雅黑', 12), angle=90, anchor=NE, fill=BLACK)
# 根据存储的数据显示当前Mcotent的值
cv.create_rectangle(753, 218, 910, 242, fill=WHITE, width=0)
cv.create_text(830, 230, text=cpu.MCO(), fill=BLACK, font=('微软雅黑', 12))
# 根据存储的数据显示当前Memory中各个存储单元的值
cv.create_rectangle(685, 281, 791, 647, fill=BLACK)
for i in range(20):# 显示存储器各个单元的地址
cv.create_text(688, 282 + 18.5 * i, text="00000000 " + bin(i).replace('0b', '').zfill(8),
font=('微软雅黑', 8), anchor=NW, fill=GOLD)
cv.create_rectangle(808, 281, 897, 649, fill=MEMBACK, width=0)
for i in range(20):# 显示存储器各个单元的内容
cv.create_text(852, 290 + 18.5 * i, text=cpu.SimMem[i], font=('微软雅黑', 6), anchor=CENTER,
fill=MEMWORD)
self.mark(cv)# 更新画布
# 根据当前的存储数据绘制当前的存储器
def init(self, cv:Canvas, root):
# 标记cpu各部分的名称
cv.create_text(670, 219, text='Mcontent', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(611, 356, text='Maddr', font=('微软雅黑', 12, 'bold'), anchor=NW, fill=WORD)
cv.create_text(690, 255, text='地址(编号)', font=('time', 12, ), anchor=NW, fill='#ffd700')
cv.create_text(830, 255, text='在选单元', font=('time', 12, ), anchor=NW, fill='#ffd700')
# 根据存储的数据显示当前Maddr的值
cv.create_rectangle(619, 383, 648, 541, fill=WHITE, width=0)
cv.create_text(620, 390, text=cpu.MAD(), font=('微软雅黑', 12), angle=90, anchor=NE, fill=BLACK)
# 根据存储的数据显示当前Mcotent的值
cv.create_rectangle(753, 218, 910, 242, fill=WHITE, width=0)
cv.create_text(830, 230, text=cpu.MCO(), fill=BLACK, font=('微软雅黑', 12))
# 根据存储的数据显示当前Memory中各个存储单元的值
# 显示存储器各个单元的地址
cv.create_rectangle(685, 281, 791, 647, fill=BLACK)
for i in range(20):
cv.create_text(688, 282 + 18.5 * i, text="00000000 " + bin(i).replace('0b', '').zfill(8), font=('微软雅黑', 8), anchor=NW, fill=GOLD)
# 显示存储器各个单元的内容
cv.create_rectangle(808, 281, 897, 649, fill=MEMBACK, width=0)
for i in range(20):
cv.create_text(852, 290 + 18.5 * i, text=cpu.SimMem[i], font=('微软雅黑', 6), anchor=CENTER, fill=MEMWORD)
# 更新画布
self.mark(cv)
if __name__ == "__main__":
mem = MEM()#实例化
mem.show(cv, root)#显示存储器界面
bw, bh = 150, 45
# 按钮1
bx1, by1 = 750, 95
B1 = tk.Button(root, text='添加程序', background=BLUE, command=lambda: test(), state=NORMAL)
B1.place(x=bx1, y=by1, width=bw, height=bh)
def test():
for i in range(20):
time.sleep(cpu.time)
for j in range(20):
cpu.SimMARK[j] = False
cpu.SimMARK[random.randint(0,19)] = True
mem.mark(cv)
cv.update()
def left1(event):
print(event.x,event.y)
cv.bind('<Button-1>', left1)
root.mainloop()