我是一个巨大的以身作则的人,这意味着描述它是典型的让我不知所措,因为我的学习风格,因为我需要首先看到,然后任何解释都可以实现。我一直在玩Nand2Tetris程序的Hack汇编语言.asm文件,并创建学习、使用和学习的片段。
我的问题是,如果我想时钟时间,例如,我如何时间或滴答-它需要的时间运行一个函数?我认为DFF门是一种可能的解决方案,但我非常困惑如何使用它来完成这项任务,并且需要看到一个可靠的示例代码。我希望有人能给我一个如何用ASM格式编码的代码示例。
例如:
Store TimeStart如何存储时间或勾选变量?Count 1-100000我已经把这部分做好了。Store TimeEnd如何存储时间或勾选变量?如何将TimeEnd - TimeStart翻译成易读的东西?
这个是可能的吗?
发布于 2020-11-04 23:35:15
无法以编程方式读取时钟/滴答时间;Hack机器无法获取该信息。
类似地,CPU仿真程序也没有这样做的能力,尽管拥有转储指令跟踪的选项会很好(也许可以为将来提供一些建议)。
当然,您可以手动跟踪代码,并计算出执行了多少条指令。因为每条指令都需要一个周期,所以这是相对简单的。
如果您完全绝望,我编写了CPU模拟器的python版本,它在功能单元级模拟计算机,作为在中继逻辑中实现Hack CPU的项目的一部分。它可以跟踪指令,并可能被修改为为您做到这一点。你可以在这里找到它:https://github.com/RJWoodhead/Relay2Tetris/blob/master/Simulator.md
发布于 2020-11-23 20:55:26
正如@MadOverlord正确指出的那样:
..。黑客机器无法获取这些信息。
但是,我注意到您正在尝试使用像DFF这样的低级别门来解决这个问题。您大概是因为阅读了“……DFF有一个根据主时钟的信号不断变化的时钟输入”,https://b1391bd6-da3d-477d-8c01-38cdf774495a.filesusr.com/ugd/44046b_862828b3a3464a809cda6f44d9ad2ec9.pdf。我认为你可能误解了这里提到的时钟的性质,并澄清了这种误解是有用的。
在较高的层次上,这个时钟代表一个离散的时间单位,它控制CPU执行操作的时间,但它不跟踪人类单位中时间的流逝。以下是https://b1391bd6-da3d-477d-8c01-38cdf774495a.filesusr.com/ugd/44046b_862828b3a3464a809cda6f44d9ad2ec9.pdf的相关摘录
这个时钟的需要是允许计算机的内部硬件有足够的时间让机器的内存在执行下一个操作之前进入适当的状态。例如,如果将两个数字相加在一起,则需要等待内存中的所有位元翻转到适当的位置,然后才能在另一个操作中使用该加法的结果。硬件操作虽然速度快,但需要不同的时间来完成各种任务,因此计算机必须在两次操作之间等待一小段时间。这一小部分时间是时钟周期之间间隔的离散时间单位。
另一方面,跟踪人类单位中时间的流逝通常是由另一个名为实时时钟的硬件提供的。这与CPU是分开的,因为CPU不需要它的行为,因此只会降低CPU实现的效率。据我所知,nand2tetris并没有以任何有意义的方式为用户建立实时时钟模型(如果我错了,请纠正我)。
我跳过了很多细节,但我觉得这条思路,在这个层次上,可能足以帮助你思考为什么你的想法行不通。或者你的想法会奏效,我错过了什么,告诉我!
祝你好运。
https://stackoverflow.com/questions/64688978
复制相似问题